使用缓冲流时记得恰当的使用flush()方法

import java.io.*;

public class TestBufferStream {
    public static void main(String[] args) {
        BufferedWriter bw = null;
        BufferedReader br = null;
        String url = "c:/test/data.dat";
        String s = null;
        try {
            bw = new BufferedWriter(new FileWriter(url));
            br = new BufferedReader(new FileReader(url));
            for(int i=0; i<100; i++) {
                s = String.valueOf(Math.random());
                bw.write(s);
                bw.newLine();
            }
            //bw.flush();
           while((s=br.readLine()) != null) {
               System.out.println(s);
           }
           bw.close();
           br.close();
        }catch(IOException e) {
            e.printStackTrace();
        }
    }

}

如果没有调用bw.flush()方法,命令行上是没有任何输出的。

但是查看data.dat文件,确实生成了,而且里面确实有不多不少100行数字。

原因在于,最后调用了bw.close()方法,在最后的时候把缓冲区的数据都写到data.dat文件里了。但是在执行到读取数据那段代码的时候文件里是没有数据的。

可以把bw.close()注释掉,验证一下。虽然没有什么影响,不过为了更清楚的话,可以把相关的class文件或者生成的dat文件也删除掉。然后重新编译和运行。

经验分享 程序员 微信小程序 职场和发展