import java.io.*; 
public class TestBufferedStream { 
public static void main(String[] args) { 
try { 
BufferedWriter bw = new BufferedWriter(new FileWriter("f:/language/java/java/shiyan02.txt")); 
BufferedReader br = new BufferedReader(new FileReader("f:/language/java/java/shiyan02.txt")); 
String s = null; 
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(); 



这个程序的运行结构是在指定的目录建立一个装着100行随机数的txt文件,之后在读出来,在程序中我做了个试验,如果我把bw.flush();这句去掉,那么,100个随机数依然可以写到那个txt文档中去,但去读不出来东西了,我想知道为什么?

解决方案 »

  1.   

    写的流和读的流分开来new
    先开写流 关了以后 再开读流
      

  2.   

      您的意思是不是说在写流没关闭之前如果我不用flush()这个方法,那么程序就视为缓冲区没干净,所以不让读 ?
      

  3.   

    我的理解是:它写入时不是一个一个字符写的,而是作为流从缓存里写入的,你不刷新的话,它不知道你到底写完没有,所以也不读了.反之它知道你已经写完了,缓存里的数据全部刷到文件里了.就可以读了.
    还有个办法你可以读到数据,你把bw.close(); 这句提前到bw.flush();这里,把它替换掉也可以.你不刷新,但你关闭了,也就可以读了.
      

  4.   

    同时开了写和读而且是缓冲流
    这样读流肯定不是更新后的内容(除非写的时候会有事件通知他一起刷新)写完了 close了
    在慢慢读好了