3

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

我遇到的一个问题是当我正在监视的文件之一被重新打开时。许多创建我正在监视的文件的应用程序在重新启动时只会重新启动它们的日志文件;它们不会附加到已经存在的内容上。

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

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

4

3 回答 3

1

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

于 2008-09-26T07:08:28.493 回答
1

正如侏罗纪所提到的,使用锁定文件是一种解决方案。

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

于 2008-09-26T07:09:59.910 回答
-1

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

于 2008-09-26T07:00:08.793 回答