1

ディレクトリを監視したいのですが、そこにファイルが表示されたら、それを開いて処理し、別のディレクトリに移動します。問題は、他のプログラムが書き終わったことを確認する方法です。Java 7 では、FileSystem から WatchService を使用できますが、ファイルがいつ作成されたかを確認することしかできません。私が知りたいのは、すべてのファイル ハンドルがいつ解放されるかを知ることです。

最初は排他ロックを取得できるのではないかと思っていましたが、実際にファイルを更新している間に別のアプリケーションを追い出すことができることがわかりました。

Javaでこれを行うための推奨される方法は何ですか? ありがとう!

4

2 に答える 2

1

Watcher API を使用すると、現在、監視対象のディレクトリでファイル システム オブジェクトが作成、変更、または削除されたときにイベントを確認できます。他の inotify イベント (Linux の場合) については教えてくれません。実際、純粋な Java でこれを行う方法はないと思います。


数週間前に自分でこれを行う方法を探していたところ、FileSystem他のファイル システム イベントをサポートするファイル ウォッチャーを提供する API のカスタム実装を作成できることを示唆するメール スレッドに出会いました。別の解決策があったので、それを追求しないことにしました...私が見ているファイルがどのように生成されているかの知識に基づいています。

私の場合、ファイルは、画像ファイルを共有ドライブに保存する機器によって生成されます。解決策は、新しく作成されたファイルの「変更された」イベントのストリームを監視することです。処理が停止し、数秒間 (「整定時間」) 処理が行われなくなると、ファイルを処理できます。

この解決策が信頼できないことが判明した場合は、フォールバックとして、inotify 呼び出しを直接使用して C / C++ で監視と初期処理 (ファイルのスナップショットを取得) を実装します。これにより、ファイルを閉じるイベントを直接観察できます。

于 2011-12-27T09:35:11.570 に答える
1

ファイルベースのインターフェイスの最も簡単な方法は次のとおりです。

  1. 送信者はファイル名を変更してファイルを書き込みます (例: "example.xml_")
  2. 送信者がファイルの書き込みを完了すると、ファイルの名前を変更します (例: "example.xml_" を "example.xml" に)。
  3. 受信機は「*.xml」のみをスキャンします
于 2012-01-03T11:45:00.750 に答える