Java写入文本文件未完成

时间:2012-09-21 15:46:49

标签: java database io text-files

我正在使用BufferedWriter将一些数据写入文本文件。它比使用ODBC写入Access更快。代码看起来像这样:

BufferedWriter bw = new BufferedWriter(new FileWriter(new File(filePath), true));

True是使BufferedWriter追加,而不是覆盖。

bw.append(          
    country + "\t" +
    scenario + "\t" +
    tempStage + "\t" +
    year + "\t" +
    tempState
);

在之前的项目中,它对我有用。新问题:它只是在线中间扯出来。这是一条很好的路线:

SultanateOfBrunei   BeeBeeScenario  Other   2019

最后一行通常如下所示:

SultanateOfBrunei   BeeBeeScenario  Other   2019 Nondyna

或     Sulta

甚至     苏

我输入错误处理代码来忽略那些奇怪的不完整的行。

这意味着并非所有数据都被写入。我可以放弃一个基准,没问题......但它似乎正在削减更多。模拟运行时间为1990年到2020年底,它通常会在2019年的某个地方出现。增加VM会有所帮助 - 它会进一步发展。但我只有一定的记忆力!

任何见解?

谢谢!

4 个答案:

答案 0 :(得分:5)

您的应用程序可能没有关闭BufferedWriter,因此输出的最后部分没有写入文件。

你的程序结构应该是这样的:

BufferedWriter bw = new BufferedWriter(new FileWriter(new File(filePath), true));
try {
    // generate output
} finally {
    bw.close();
}

请注意,这不会尝试处理打开,写入或关闭编写器时可能出现的I / O异常。您是否应该这样做,以及您应该对您捕获的任何异常做什么取决于具体情况。

答案 1 :(得分:1)

在关闭它之前,你可能没有刷新(bw.flush())流。这应该对所有流完成,但对缓冲的流更为重要。

答案 2 :(得分:1)

您只需关闭BufferedWriter即可。如果你不这样做,最后填充的缓冲区可能不会被写入。

答案 3 :(得分:1)

完成写作后,您应该在BufferedWriter对象上调用close()。这将确保您的流被刷新并因此关闭。