zoukankan      html  css  js  c++  java
  • Java 文件IO写入读取四种方法

    第一种:字节流 FileInputStream  FileOutputStream

     1.1 读取操作

    //先创建一个和硬盘连接的流(打通硬盘和内存的通道)
    FileInputStream fis = new FileInputStream("D:\Demo.txt");
    //创建缓存区大小是1k
    byte[] bytes = new byte[1024];
    int data = 0; //存储有效字节数
    StringBuffer sb = new StringBuffer();
    //由于文件大小通常远远大于缓冲区大小,所以要循环读取
    while((data = fis.read(bytes)) != -1){//返回-1则文件读取完毕,停止循环读取
      String temp=new String(bytes,0,data);//读取缓冲区的字节数,转换成字符串
      sb.append(temp);
      System.out.printlb("====有效字节数===="+data);
    }
    System.out.printlb(sb.toString());
    //关闭流
    fis.close();

    1.2 写入操作

    //创建一个读取文件的流
    FileOutputStream fos = new FileOutputStream("E:\Demo.txt");
    String temp = "海内存知己,天涯若比邻。";
    //把字符串分解成字节,填到字节数组中
    byte[] bytes = temp.getBytes();
    //写入到指定路径,没有则创建文件
    fos.write(bytes);
    //关闭流
    fos.close();
    System.out.println("写入成功!");

    第二种:字符流 char   FileReader FileWriter

    tips:在不同操作系统和编码方式下,char和byte之间的关系不是固定的

           一般认为:gbk/gb2312     2个byte

           utf-8                3个byte

    2.1  读取操作

    Reader fr = new FileReader("E:\Demo.txt");
    char ch[] = new char[1024];
    StringBuffer sbf = new StringBuffer();
    int length = fr.read(ch);
    while (length != -1) {
      sbf.append(ch);
      length = fr.read();
    }
    System.out.println(sbf.toString());
    fr.close();

    2.2  写入操作

    Writer fr = new FileWriter("D:\Demo.txt");
    fr.write("有朋自远方来,不亦乐乎");
    fr.close();

    第三种:带缓冲区的字符读取和写入方案  

                          BufferedReader

          BufferedWriter  缓冲区  存储的数据量默认是1024byte

    3.1  读取操作

    Reader fr = new FileReader("D:\Demo.txt");
    BufferedReader br = new BufferedReader(fr);
    String line = br.readLine();
    while (line != null) {
      System.out.println(line);
      line = br.readLine();
    }
    br.close();
    fw.close();

    3.2  写入操作

      Writer fw = new FileWriter("D:\Demo.txt",true);//true 为连续追加
      BufferedWriter bw = new BufferedWriter(fw);
      bw.write("学而时习之,不亦説乎");
      bw.close();
      fw.close();

    第四种:二进制方式的读取和写入方案

          DataInputStream

          DataOutputStream

           读写操作:复制粘贴

    InputStream is = new FileInputStream("E:\春暖花开.jpg");
    DataInputStream dis = new DataInputStream(is);

    OutputStream ops = new FileOutputStream("D:\春暖花开.jpg");
    DataOutputStream dos = new DataOutputStream(ops);

    byte[] bytes = new byte[1024];
    int date = 0;
    while ((date = dis.read(bytes)) != -1) {
    dos.write(bytes,0,date);
    }

    dos.close();
    ops.close();
    dis.close();
    is.close();

    System.out.println("复制成功");

  • 相关阅读:
    CSS未知宽高元素水平垂直居中
    CSS(二)
    CSS(一)
    菜鸟学JS&JQuery(随笔二——jQuery提供的选择器、修改一个标签中的内容、操作标签的类属性)
    菜鸟学JS&JQuery(随笔一)
    webpack loader的加载顺序(从右向左,从下向上)
    padStart()方法,padEnd()方法
    说说 Vue.js 中的 v-cloak 指令
    用阿里云 DNS SDK 实现动态域名解析
    使用阿里云 dns sdk 解决电信公网ip自动变化问题;自己动手实现ddns
  • 原文地址:https://www.cnblogs.com/chenyang520/p/9068227.html
Copyright © 2011-2022 走看看