在 Linux 中,当您打开文件的输入流时,另一个进程可以重命名该文件。因此,当文件翻转时,您仍然可以从流中读取。在 Windows 中,当您打开输入流时,在关闭输入流之前无法重命名该文件。如何在不影响“重命名”过程的情况下读取文件?
我尝试过使用 java.nio.FileChannel。它适用于不同进程同时读取和写入文件(例如Java进程读取和记事本写入),但不适用于重命名文件(例如Java进程读取但重命名命令不起作用)。
最简单的解决方案如下(我只是从我的一条评论中复制)
在您阅读完新添加的行后,关闭阅读器,这样尝试进行旋转的其他进程将成功。但是进行日志轮换的进程必须尝试多次,直到它发现没有其他进程正在读取它。
apache commons IO Tailer可以做到这一点。