检测Java中文件是否被重新打开

3
我正在开发一个小型Java应用程序(Java 1.6,Solaris),它将使用多个后台线程来监视一系列文本文件的输出行,这些行符合特定的正则表达式模式,然后利用这些行。我每个文件都有一个线程;它们将感兴趣的行写入队列,另一个后台线程仅监视队列以收集整个被监视文件集合中所有感兴趣的行。
其中一个问题是当我监视的文件之一重新打开时。我监视的文件中创建许多应用程序仅在它们重新启动时重新启动其日志文件;它们不会追加到已经存在的内容上。
我需要我的Java应用程序检测到文件已重新打开并重新跟随该文件。
如何最好地做到这一点?
3个回答

1

你能记录每个文件的长度吗?当当前长度随后返回零或小于上次记录的长度时,你就知道该文件已被应用程序重新启动了吗?


1

使用锁文件是Jurassic提到的一种解决方案。

另一种方法是在读取模式时尝试打开文件,并查找文件是否具有新的大小和创建时间。如果创建时间与您发现它时不同,则可以确定它已被重新创建。


-1

你可以在文件系统中的某个地方指示正在读取给定文件。假设在要读取的文件(a.txt)旁边创建一个文件(a.txt.lock),表示正在读取a.txt。当进程完成后,将删除a.txt.lock。每次进程打开要读取的文件时,都会先检查锁定文件。如果没有锁定文件,则该文件未被使用。希望这样说得清楚并回答了你的问题。谢谢!


PS,这通常被程序用来确定另一个实例是否正在运行。 - Jurassic_C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接