Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用BufferedWriter将数据写入.txt文件,如果应用程序被强制关闭,存储到.txt文件的任何数据都不会保存?_Java_Text_Bufferedwriter_Writing - Fatal编程技术网

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()
关闭了它。如果那不是真正的代码,你的问题是徒劳的。