3

複数のバックグラウンド スレッドを使用して、特定の正規表現パターンに一致する一連のテキスト ファイルを監視し、それらの行を利用する小さな Java アプリケーション (Java 1.6、Solaris) に取り組んでいます。ファイルごとに 1 つのスレッドがあります。対象の行をキューに書き込み、別のバックグラウンド スレッドが単にキューを監視して、監視対象のファイルのコレクション全体から対象のすべての行を収集します。

私が抱えている問題の 1 つは、監視しているファイルの 1 つが再度開かれたときです。私が監視しているファイルを作成するアプリケーションの多くは、再起動時にログファイルを再起動するだけです。すでにあるものには追加しません。

ファイルが再度開かれたことを検出し、ファイルに従って再起動するには、Java アプリケーションが必要です。

これを行うにはどうすればよいですか?

4

3 に答える 3

1

各ファイルの長さのそれぞれの記録を保持できますか?その後、現在の長さがゼロに戻るか、最後に長さを記録したときよりも小さい場合、ファイルがアプリによって再起動されたことを知っていますか?

于 2008-09-26T07:08:28.493 に答える
1

ジュラシックが述べたように、ロックファイルを使用することは解決策です。

もう1つの方法は、パターンを読み取っているときにファイルを開いて、ファイルのサイズと作成時間が新しいかどうかを確認することです。作成時間が見つけたときと同じでない場合は、再作成されたことを確認できます。

于 2008-09-26T07:09:59.910 に答える
-1

特定のファイルを読み取っていることを示すファイルシステムのどこかを示すことができます。読み取られているファイル (a.txt) の隣に、a.txt が読み取られていることを示すファイル (a.txt.lock) を作成するとします。プロセスが完了すると、a.txt.lock は削除されます。プロセスがファイルを開いて読み取るたびに、事前にロックファイルをチェックします。ロックファイルがない場合は、使用されていません。それが理にかなっていて、あなたの質問に答えてくれることを願っています。乾杯!

于 2008-09-26T07:00:08.793 に答える