5

我正在使用 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 循环显然以空值结束。它在我的 250k+ 行 txt 文件的末尾。谢谢!

4

3 回答 3

7

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

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

于 2009-06-16T15:03:43.080 回答
1

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

于 2009-06-16T15:03:12.177 回答
1

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

p.flush()在你的while循环之后添加一个 应该可以解决问题。

于 2009-06-16T15:03:23.080 回答