我正在使用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会有所帮助 - 它会进一步发展。但我只有一定的记忆力!
任何见解?
谢谢!
答案 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()
。这将确保您的流被刷新并因此关闭。