有很多方法,可以使用创建程序并调用 Unixtail
命令,但是这样做的问题是该进程必须安装在安装了 tail 的 Unix 机器上。
另一种选择是逐行读取文件,直到没有更多行,休眠一段时间,然后尝试读取下一行并重复。
问题是我如何/如何轮询正在积极写入的文件。AFAIK 在文件被修改时,Java 无法获取异步通知,因为这太低级(来自操作系统的东西)。我也知道没有支持这一点的库。
我在想一个更好的方法可能是在文件的修改日期休眠/轮询..?
有什么解决办法吗?
有很多方法,可以使用创建程序并调用 Unixtail
命令,但是这样做的问题是该进程必须安装在安装了 tail 的 Unix 机器上。
另一种选择是逐行读取文件,直到没有更多行,休眠一段时间,然后尝试读取下一行并重复。
问题是我如何/如何轮询正在积极写入的文件。AFAIK 在文件被修改时,Java 无法获取异步通知,因为这太低级(来自操作系统的东西)。我也知道没有支持这一点的库。
我在想一个更好的方法可能是在文件的修改日期休眠/轮询..?
有什么解决办法吗?
如果文件/目录已更改,您可以使用java nio 的 WatchService获取异步通知。本教程解释了使用它的方法。
为了简化这一点,您可以做的是创建一个线程来轮询文件的大小并且只读取那么多,即它永远不会到达结尾。读取的数据可以写入管道,允许您的主线程读取连续管道。
我不知道答案。只有两个提示
1. 也许 RandomAccessFile 会帮助你。
2. 尝试找到另一个开源程序,它可以做到这一点。(例如 IntelliJ IDEA 就是这样做的)