Java 使用BufferedWriter将数据写入.txt文件,如果应用程序被强制关闭,存储到.txt文件的任何数据都不会保存?
这是我正在使用的代码:Java 使用BufferedWriter将数据写入.txt文件,如果应用程序被强制关闭,存储到.txt文件的任何数据都不会保存?,java,text,bufferedwriter,writing,Java,Text,Bufferedwriter,Writing,这是我正在使用的代码: public static void log(String directory, String name, String input) throws IOException { File path = new File(directory); if (!path.exists()) { path.mkdirs(); } File file = new File(directory + "/" + name + ".t
public static void log(String directory, String name, String input) throws IOException {
File path = new File(directory);
if (!path.exists()) {
path.mkdirs();
}
File file = new File(directory + "/" + name + ".txt");
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(input);
bw.close();
}
我让这个应用程序在运行时记录到许多不同的.txt文件。据我所知,一旦使用此日志方法“打开”文本文件,它就会被占用,直到程序关闭。当它由于某种原因被强制关闭时(比如关闭我的电脑或通过任务管理器将其关闭),它将不会保存在打开时写入的任何数据。有什么办法解决这个问题吗?多谢各位
据我所知,一旦使用此日志方法“打开”文本文件,它就会被占用,直到程序关闭
否。当您调用close()
时,它将关闭
当它由于某种原因被强制关闭时(比如关闭我的电脑或通过任务管理器将其关闭),它将不会保存在打开时写入的任何数据
调用close时,数据将被刷新
有什么办法解决这个问题吗
没有什么要解决的。
刷新写入程序-关闭写入程序即可。您的代码效率很低,因为打开和关闭文件是一项昂贵的操作。如果出现错误,你也会冒着丢掉文件“打开”的风险——考虑使用<代码>尝试使用资源< /代码>块。一个稍微好一点的解决方案可能是使用生产者/消费者方法,将消息放在队列中,然后在一个单独的线程上,将它们写到文件中。这样,当队列中出现新消息时,您可以打开文件,写入/刷新队列,直到队列为空,然后关闭文件并等待更多“如果”JVM被强制终止,而“写入操作正在进行,那么不,我怀疑您是否能够解决此问题-这是您需要承担的风险。”。所有这些都引发了一个问题:为什么不使用内置的日志API或log4j,它无论如何都能为您完成所有这些工作FileWriter fw=newfilewriter(file.getAbsoluteFile())
不相关,只需使用FileWriter fw=newfilewriter(file)
我认为这是因为FileWriter从未关闭,而在您发布的代码中,bw.close()
关闭了它。如果那不是真正的代码,你的问题是徒劳的。