zl程序教程

您现在的位置是:首页 >  Java

当前栏目

文件输入输出处理(四)-字符缓冲流

2023-03-31 11:05:09 时间

大佬的理解->《Java IO(五) -- 字符流进阶及BufferedWriter,BufferedReader》

1、BufferedReader

BufferedReader高效字符流读取文件基本用法,自带缓冲区,读取文件效率高,支持逐行读取;

1.1 初始化

BufferedReader(Reader in) 默认缓冲字符数组(大小8192)
BufferedReader(Reader in, int sz) 自定义缓冲字符数组大小

1.2 读取文件内容

buffer1.txt文件内容

张三,23
李四,34
王五,34

逐行读取案例

try(BufferedReader bfrd = new BufferedReader(new FileReader("D:/test/buffer1.txt"))){
    //使用逐行读取方式,读取文件
    String readLinestr = bfrd.readLine();

    //当读取内容为null的时候跳出循环
    while(readLinestr != null){
        System.out.println(readLinestr);
        //继续读取下一行
        readLinestr = bfrd.readLine();
    }

    System.out.println("逐行读取成功");

}catch (Exception e){
    e.printStackTrace();
}

运行结果

张三,23
李四,34
王五,34
逐行读取成功

1.3 默认缓冲区

//默认缓冲区的大小为:8192个字符

源码

public BufferedReader(Reader in) {
    this(in, defaultCharBufferSize); //使用默认字符数组容量
}

private static int defaultCharBufferSize = 8192; //默认最大值为8192

2、BufferedWriter

BufferedWriter高效字符流写入文件基本用法,可以直接写整行,还可以换行(newLine());

2.1 初始化

BufferedWriter(Writer out) 默认缓冲字符数组(大小8192)
BufferedWriter(Writer out, int sz) 自定义缓冲字符数组大小

2.2写入文件内容

try(BufferedWriter bfwt = new BufferedWriter(new FileWriter("D:/test/buffer2.txt"))){
    //写入内容
    String string = "KH96,正在学习高效字符流写入";
    //写入
    bfwt.write(string);
    //换行
    bfwt.newLine();
    bfwt.write(string+",新的一行");
    
    //刷新缓冲区
    bfwt.flush();

    System.out.println("高效字符写入完成");

}catch (Exception e){
    e.printStackTrace();
}

3、InputStreamReader

InputStreamReader(InputStream in) 默认本地字符集
InputStreamReader(InputStream in, String charsetName) 自定义字符集

BufferedReader 通过InputStreamReader可以指定字符集读取文件的内容;

  try(
      //InputStreamReader提供了一个指定字符集的构造方法,创建输入字符对象,必须指定字符集跟文件字符集一致
      BufferedReader bfrd = new BufferedReader(new InputStreamReader(new FileInputStream("D:/test/end1.txt"),"gbk"))
  ){
      //使用逐行读取方式,读取文件
      String readLinestr = bfrd.readLine();

      //循环读取,读取到文件末尾,返回null
      while(readLinestr != null){
          System.out.println(readLinestr);
          //继续读取下一行
          readLinestr = bfrd.readLine();
      }
      System.out.println("逐行读取成功");

  }catch (Exception e) {
      e.printStackTrace();
  }

4、 OutputStreamWriter

OutputStreamWriter(OutputStream out) 默认本地字符集
OutputStreamWriter(OutputStream out, String charsetName) 自定义字符集

BufferedWriter 通过OutputStreamWriter可以指定字符集写入文件的内容;

  try(
        BufferedWriter bfrwt = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:/test/end1.txt"),"gbk"))
        ){
            String str = "测试指定文件字符集为gbk写入";
            bfrwt.write(str);

            System.out.println("文件写入完成!!!");

        }catch (Exception e) {
            e.printStackTrace();
        }