我正在开发一个小型Java应用程序(Java 1.6,Solaris),该应用程序将使用多个后台线程来监视一系列文本文件,以查找与特定正则表达式模式匹配的输出行,然后使用这些行。我每个文件有一个线程;它们将感兴趣的行写入队列,另一个后台线程只是监视队列,以收集整个被监视文件集合中的所有感兴趣行。
我遇到的一个问题是当我正在监视的一个文件被重新打开时。许多创建我正在监视的文件的应用程序在重新启动时只会重新启动其日志文件;它们不会附加到已经存在的内容。
我需要我的 Java 应用程序来检测该文件是否已重新打开并在该文件之后重新启动。
我怎样才能最好地做到这一点?
你能记录每个文件的长度吗? 当当前长度随后恢复为零或小于上次记录长度时,您知道应用程序已重新启动文件吗?
使用锁定文件是侏罗纪提到的解决方案。
另一种方法是尝试在读取模式时打开文件,并查找文件是否具有新大小和创建时间。如果创建时间与您找到它的时间不同,那么您可以确定它已被重新创建。
您可以在文件系统上的某个位置指示您正在读取给定文件。假设在正在读取的文件旁边 (a.txt),您在它旁边创建一个文件(a.txt.lock),指示正在读取 a.txt。处理完后,将删除 a.txt.lock。每次进程打开文件以读取文件时,它都会事先检查锁定文件。如果没有锁定文件,则不会使用它。我希望这是有道理的,并回答你的问题。干杯!