0

我目前正在寻找一种监视文件更改的好方法。

情况:我有一个 Teamspeak3 服务器正在运行,它会创建 .log 文件。每个启动一个。Parallely 有一个 java bot 正在运行,使用服务器查询 api。

不幸的是,如果要捕获重要事件(如服务器组分配等),teampeak 的查询 api 会受到很大限制。这些被服务器捕获并记录,但不会被触发到查询客户端。

我的想法是监视服务器的 *.log 文件,对文件更改做出反应并通过最新的文件条目解决实际事件。

我的问题是,每次注意到更改时,我都必须读入整个文件。我的意思是,这些文件很容易达到 10mb++,并且根据 ts3 服务器的“人口”,变化经常发生。

使用 java.nio.file 可以轻松监控文件(或准确地说是目录),但我如何只读取最后一行?

我现在真的想不出一种优雅的方式来处理这个问题。

感谢您的帮助和建议!

喜达

4

1 回答 1

0

您可以将 commons-io ReversedLinesFileReader 与 WatchService API 结合使用。https://commons.apache.org/proper/commons-io/javadocs/api-2.4/org/apache/commons/io/input/ReversedLinesFileReader.html

https://docs.oracle.com/javase/tutorial/essential/io/notification.html

根据这些事件的频率,这可能不是最高效的。它也可能因缺少事件而变得不稳定。您必须跟踪已处理的事件。跟踪日志文件并以这种方式处理来自 StandardIn 的输入可能是一个更好的选择。

于 2018-02-02T20:12:32.810 回答