Java 如何判断文件是否已重命名?

Java 如何判断文件是否已重命名?,java,Java,我有一个程序监控日志文件的更改。程序使用FileInputStream来保持对文件的读取。同时,日志文件可能会旋转:重命名旧日志文件,并将新日志条目写入新文件 我的程序如何确定文件已重命名,从而切换到读取新的日志文件?也许您可以更改文件系统并根据需要进行更改。我能想到的最简单的方法就是每5秒或类似的时间轮询一次文件大小 如果您正在读取的文件已重命名并创建了一个新文件,则您的轮询将显示大小突然减小。然后,您可以相应地重新创建FileinputStream。根据sseems,这是解决问题的最佳方案:

我有一个程序监控日志文件的更改。程序使用FileInputStream来保持对文件的读取。同时,日志文件可能会旋转:重命名旧日志文件,并将新日志条目写入新文件


我的程序如何确定文件已重命名,从而切换到读取新的日志文件?

也许您可以更改文件系统并根据需要进行更改。

我能想到的最简单的方法就是每5秒或类似的时间轮询一次文件大小

如果您正在读取的文件已重命名并创建了一个新文件,则您的轮询将显示大小突然减小。然后,您可以相应地重新创建FileinputStream。

根据sseems,这是解决问题的最佳方案:

JNotify是一个java库,允许java应用程序侦听文件系统事件,例如:

创建的文件

文件修改

文件重命名

文件删除


除非您正在监视文件系统中的更改事件,否则您真的不能。您开发的文件系统/平台是什么?如果打开并主动读取文件,重命名会成功吗?类似问题的可能重复,并给出了有价值的答案:是的,但只有在他使用Java 7的情况下。java 6或更早版本中不存在
java.nio.file
包。事实上,java.nio.file有后台端口,比如这个问题()回答了sjnotify和java.nio.file听起来不错,但就我而言,轮询文件大小更简单。最后我们切换到JNotify。它比轮询文件大小更可靠。如果旧文件为空,则无法通过比较大小来检测文件旋转。