检测文件正在Java中重新打开

时间:2020-03-06 14:46:07  来源:igfitidea点击:

我正在开发一个小型Java应用程序(Java 1.6,Solaris),该应用程序将使用多个后台线程来监视一系列文本文件,以查找与特定正则表达式模式匹配的输出行,然后利用这些行。每个文件有一个线程;他们将感兴趣的行写入队列,另一个后台线程仅监视队列,以收集整个受监视文件集合中的所有感兴趣的行。

我遇到的一个问题是重新打开我正在监视的文件之一。许多创建我正在监视的文件的应用程序将在重新启动时简单地重新启动其日志文件。他们不会添加到已经存在的内容上。

我需要我的Java应用程序来检测文件是否已重新打开并在文件之后重新启动。

我怎样才能最好地做到这一点?

解决方案

我们可以在文件系统上的某处指示我们正在读取给定的文件。假设在正在读取的文件(a.txt)旁边,我们在该文件旁边创建了一个文件(a.txt.lock),该文件指示正在读取a.txt。完成处理后,a.txt.lock将被删除。每当一个进程打开一个文件来读取它时,它将事先检查锁定文件。如果没有锁文件,则不使用它。我希望这是有道理的,并回答问题。干杯!

我们可以保留每个文件长度的记录吗?当当前长度随后回到零或者小于我们上次记录的长度时,我们知道该文件已被应用重新启动吗?

如Jurassic所述,使用锁文件是一种解决方案。

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