我正在使用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文件的末尾。谢谢!

有帮助吗?

解决方案

您在哪里刷新/关闭PrintWriter或FileOutputStream?如果程序退出且未完成,则不会将所有结果都写出来。

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

其他提示

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top