使用缓冲流时记得恰当的使用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();
}
}
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文件也删除掉。然后重新编译和运行。