4

有很多方法,可以使用创建程序并调用 Unixtail命令,但是这样做的问题是该进程必须安装在安装了 tail 的 Unix 机器上。

另一种选择是逐行读取文件,直到没有更多行,休眠一段时间,然后尝试读取下一行并重复。

问题是我如何/如何轮询正在积极写入的文件。AFAIK 在文件被修改时,Java 无法获取异步通知,因为这太低级(来自操作系统的东西)。我也知道没有支持这一点的库。

我在想一个更好的方法可能是在文件的修改日期休眠/轮询..?

有什么解决办法吗?

4

4 回答 4

5

如果您可以使用 Java 7,则有 File Watchers,您可以实现您所需要的。
文件通知

对于 Java 6(和更早版本),您必须使用 Apache Commons VFS(文件监视器)库来创建您自己的文件监视器。

如果您不能使用 Java 7 或使用第三方库(例如 commons 或jnotify),您将不得不使用轮询线程自己编写一个文件看门狗。

于 2012-04-12T06:18:31.360 回答
3

如果文件/目录已更改,您可以使用java nio 的 WatchService获取异步通知。本教程解释了使用它的方法。

于 2013-02-27T20:55:40.417 回答
1

为了简化这一点,您可以做的是创建一个线程来轮询文件的大小并且只读取那么多,即它永远不会到达结尾。读取的数据可以写入管道,允许您的主线程读取连续管道。

于 2012-04-12T07:24:12.247 回答
0

我不知道答案。只有两个提示
1. 也许 RandomAccessFile 会帮助你。
2. 尝试找到另一个开源程序,它可以做到这一点。(例如 IntelliJ IDEA 就是这样做的)

于 2012-04-12T06:19:24.420 回答