【问题标题】:Java: Updating a .txt file as the program runs and being able to see the changeJava:在程序运行时更新 .txt 文件并能够看到更改
【发布时间】:2016-04-28 10:45:39
【问题描述】:

我必须运行一个需要跟踪用户进行的事务的 Java 程序。我需要在 .txt 文件中记录这些事务。 我的代码一切正常,预计在程序关闭之前我看不到 .txt 文件 - 它不是创建的。

我们项目的目标是能够在程序运行时看到该文件实时更新。用户完成订单#1,该订单的交易记录到 .txt 文件中,可以立即看到更改——而程序仍在运行。用户完成订单 #2,该订单的交易被附加到 .txt 文件中 - 再次,同时程序正在运行。

我正在使用:

PrintWriter out;
out = (new PrintWriter(new FileWriter("log.txt", true)));

(writes lines to file)

out.flush();
out.close();

此代码位于每次用户完成订单时都会调用的方法中。订单完成后,log.txt 文件应立即反映更改,而不会退出程序。我花了几个小时来搜索如何做到这一点,但我没有成功。我对 Java 和编程也比较陌生;因此,非常感谢任何指导。

谢谢。

【问题讨论】:

  • 这可能是文本编辑器的问题,而不是程序的问题。如果重新打开文件,内容是否更新?
  • 感谢您的评论。什么都没有更新。当 log.txt 文件还不存在时——它是要创建的——在程序退出之前它不存在于目录中。我也在使用 IntelliJ 来运行程序。 log.txt 仅在程序完成时显示。
  • 如果没有像样的minimal reproducible example,几乎不可能猜出您的程序可能存在什么错误。如果您仍在寻找解决方案,请考虑创建并发布此问题。
  • 我发现了问题!感谢@AndrewWilliamson 提到这一点。我意识到是 Intellij 阻止了文件显示在文件目录中。我以另一种不同的方式运行它,我可以看到文件显示出来,并且“上次修改”随着每个新订单的提交时间而更新!非常感谢!

标签: java file io enterprise


【解决方案1】:

可能只有当您调用 flush 方法时,您的缓冲区才会被卸载并写入文件。缓冲区在写入操作之前等待积累一些数据。

【讨论】:

    【解决方案2】:

    你看过标准的 java 日志框架吗? (slf4j) 这是一个无处不在的 api,并且有很多非常好的实现,比如logback,或者 log4j 等等。让那些担心写入文件的人。编程到接口(即 slf4j 接口)并复制粘贴(如果您不想做任何花哨的事情)从互联网上为记录器实现的一些 xml 配置。

    您不必打开文件,也不必刷新和关闭它们。你的代码是:

    log.info("something happened");
    

    阅读这个主题,因为实际上没有没有日志元素的严肃的 Java 项目。花一些时间学习这个框架一次,因为你可以永远使用它。

    【讨论】:

      猜你喜欢
      • 2015-09-10
      • 2018-11-06
      • 1970-01-01
      • 2019-02-04
      • 2013-12-14
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多