【问题标题】:Using BufferedWriter to write data into a .txt file, if the application is force-closed, any data stored to .txt files do not save?使用 BufferedWriter 将数据写入 .txt 文件,如果应用程序被强制关闭,存储到 .txt 文件中的任何数据都不会保存?
【发布时间】:2018-06-23 23:40:45
【问题描述】:

这是我正在使用的代码:

    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 文件。据我了解,一旦使用这种日志方法“打开”文本文件,它就会被占用,直到程序关闭。当它由于某种原因被强制关闭时(比如关闭我的电脑或通过任务管理器关闭它),它不会保存打开时写入的任何数据。有没有办法解决这个问题?谢谢你。

【问题讨论】:

  • flush 作者 - close 会这样做。您的代码效率很低,因为打开和关闭文件是一项昂贵的操作。如果出现问题,您还会冒着让文件“打开”的风险 - 请考虑改用 try-with-resources 块。稍微好一点的解决方案可能是使用生产者/消费者方法,将消息放在队列中,然后在单独的线程上将它们写到文件中。这样你可以在队列中有新消息时打开文件,写入/刷新直到队列为空,然后关闭文件并等待更多
  • "IF" JVM 在“当”写入操作正在进行时被强制终止,那么不,我怀疑无论如何您都可以解决问题 - 这是您需要承担的风险.所有这些都引发了一个问题,即为什么您不使用内置的日志 API 或 log4j,它们无论如何都会为您完成所有这些工作
  • FileWriter fw = new FileWriter(file.getAbsoluteFile()); 无关紧要,使用FileWriter fw = new FileWriter(file);

标签: java text bufferedwriter writing


【解决方案1】:

据我了解,一旦使用这种日志方法“打开”文本文件,它就会一直被占用,直到程序关闭。

没有。拨打close()时关闭。

当它由于某种原因被强制关闭时(比如关闭我的电脑或通过任务管理器关闭它),它不会保存打开时写入的任何数据。

当你调用 close 时数据将被刷新。

有没有办法解决这个问题?

没有什么可以解决的。

【讨论】:

  • 我认为这是因为 FileWriter 从未关闭
  • 它已在您发布的代码中由bw.close() 关闭。如果那不是真正的代码,那么您的问题就是徒劳的。
猜你喜欢
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-26
  • 2011-04-14
  • 1970-01-01
  • 2014-01-26
  • 1970-01-01
相关资源
最近更新 更多