2009-06-16 64 views
5

我使用BufferedReader和PrintWriter遍历输入文件的每一行,对某些行进行更改并输出结果。如果一行不经过更改,它只是按原样输出到输出文件。但是由于某种原因,这个过程过早地结束了。该代码看起来是这样的:对我的输入文件的末尾BufferedReader/PrintWriter的问题?

BufferedReader in = new BufferedReader(new FileReader("in.txt")); 
FileOutputStream out = new FileOutputStream("out.txt"); 
PrintWriter p = new PrintWriter(out); 
String line = in.readLine(); 

while(line!=null) 
{ 
    if(line is special) 
     do edits and p.println(edited_line); 
    else 
     p.println(line); 

    line = in.readLine(); 
} 

但是,对于一些奇怪的原因,这个过程过早结束(实际打印出一条线的一半)。这有什么明显的原因? while循环显然是由null结束的。这是我的250k +行txt文件的结尾。谢谢!

+0

你真的确认没有异常被抛出?如果抛出异常*,你会怎么做?会记录吗? – 2009-06-16 15:03:13

+0

乔恩 - 别忘了PrintWriter压扁异常 - 您必须使用“checkError”方法来查看是否发生了异常。 – MetroidFan2002 2009-06-16 15:04:25

回答

7

你在哪里刷新/关闭PrintWriter或FileOutputStream?如果程序退出并且没有完成,则不会写出所有结果。

你需要out.close()(可能是p.flush()呢?)在你的进程结束时关闭文件输出流

1

尝试在循环后添加p.flush()。

1

PrintWriter没有启用自动填充功能,因此在程序终止之前文件的最后一位可能不会被刷新。

在你的while循环之后添加一个 p.flush()应该可以做到。