【问题标题】:Java - Reading file while another process updates it [duplicate]Java - 在另一个进程更新文件时读取文件[重复]
【发布时间】:2012-10-03 08:09:12
【问题描述】:

可能重复:
How do I use Java to read from a file that is actively being written?

我有一个程序(陷阱接收器),它在文件末尾附加一个字符串。这个程序基本上记录了它所做的一切。

我希望我的程序读取该日志文件。我这样做会遇到什么问题,最有效的方法是什么。在另一个进程更新文件时读取文件。

【问题讨论】:

标签: java file io


【解决方案1】:

假设这个记录器和大多数记录器一样,不只是附加任何类型的字符串,而是整行。

您可以简单地使用 bufferedReader 并等待,如果您什么都没有:

BufferedReader br = new BufferedReader(new FileReader("path"));
String line;
while (true) {
    line = br.readLine();
    if (line != null) {
        // do something
    } else {
        Thread.sleep(DELAY);   // DELAY could be 100 (ms) for example     
    }
}

当然,如果您的应用程序有其他任务要完成,您必须在单独的线程中执行此操作。

如果您想避免拉动,在非常罕见的日志记录的情况下,您可以使用watch service,但我从未在简单文件上尝试过它,我不确定它是否总是可靠的。

【讨论】:

  • 非常感谢 Dystroy .....我在 google 上做了一些研究,发现了一个叫做 mutex 的东西,我相信它就像文件锁。这种方法会绕过这个问题吗?
  • Mutex 是另一回事:它们用于同步不同的线程。我不认为互斥锁在这里有用。
  • 我明白了。谢谢你。此代码将用于最有可能 24/7 运行的服务器。希望这段代码不会崩溃哈哈。我会让你知道情况如何。再次感谢您。
  • 不要忘记捕获 IO 异常,并在需要时重新打开阅读器。另一个细节:大多数 24/7 记录器每天(或太大时)都会更改文件,因此您可能需要查看目录而不仅仅是文件。
  • 欣赏它。我会尽可能写出最好的 est 代码。
猜你喜欢
  • 1970-01-01
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多