2011-04-22 164 views
3

我有一个程序监视日志文件的变化。该程序使用FileInputStream来继续读取文件。同时,日志文件可能会被旋转:旧的日志文件被重命名并且新的日志条目被写入到一个新文件中。如何判断文件是否被重命名?

我的程序如何确定文件被重命名,以便它切换到新的日志文件?

+1

除非您正在监视文件系统中的更改事件,否则实际上不能。你正在开发什么文件系统/平台? – 2011-04-22 09:04:41

+0

将重命名成功,如果文件打开并积极读取? – Bozho 2011-04-22 09:06:56

+0

可能的重复[是否有一个复杂的文件系统监视器的Java是免费的或开源的?](http://stackoverflow.com/questions/1096404/is-there-a-sophisticated-file-system-monitor-for -java-which-free-or-open-s) – krock 2011-04-22 09:22:49

回答

5

根据this question,JNotify sseems是你的问题的完美解决方案:

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

文件创建

文件修改

文件改名

文件已删除

0

也许你可以watch文件系统,并根据你的需要进行更改。

+2

是的,但只有当他是使用Java 7. java.nio.file包在Java 6或更早版本中不存在。 – darioo 2011-04-22 09:10:22

+1

实际上有java.nio.file的backports,像这个问题(http://stackoverflow.com/q/1096404/15619)回答提到 – Riduidel 2011-04-22 09:17:49

0

我能想到的最简单的方法就是每5秒轮询文件大小或类似的东西。

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

+0

JNotify和java.nio.file听起来不错,但对于我的情况轮询文件大小更简单。 – aleung 2011-05-10 14:26:43

+0

最后我们切换到JNotify。这比轮询文件大小更可靠。如果旧文件为空,则无法通过比较大小来检测文件旋转。 – aleung 2011-12-26 04:12:50

相关问题