私はアプリケーションワークベンチとの同期データファイルにWatchService
を使用しています。監視ディレクトリの名前を変更したり移動したりすると、イベントが発生せず、WatchKeyも無効になりません。私はまだ名前が変更されたディレクトリからイベントを取得しますが、実際にはWatchKey.watchable()
以外のWatchKeyの実際のパスを見つける方法はありませんが、それでも元のディレクトリパスが返されます。私はアプリケーションを可能な限り軽量に保つために、監視されたディレクトリを変更に対してロックする必要がないようにしたいと思います。Java7 WatchService - 実際の監視ディレクトリの名前変更/移動を検出する方法
私は
のWindows 7上のJDK 7u10でこの問題を経験しているディレクトリをロックするか、ルートにすべてのディレクトリを見ずに、あなたがこの問題の任意の回避策を知っていますか? Linuxの
UPDATE
私は同じ動作を観察しています。
これまでのところ、3つのオプションがあるようです。
1)データディレクトリを移動しないようにユーザーの規律に依拠します。未定義の動作につながる可能性があるので、私はこのオプションが本当に好きではありません。
2))
3より広範な非標準のネイティブライブラリを使用し、優れたディレクトリの番犬の階層を作成します。このイベント(またはOVERFLOW
)は、実際に監視されているディレクトリが移動または削除されたため無効になった瞬間に表示される必要があるため、ENTRY_DELETE
イベントのみを受け入れます。
のJavadocは、これは、そのためにネイティブに利用可能なメカニズムを使用して、あなたがしようとしているとwin7ののメカニズムが、この場合に作用する方法を検索することを指定します? – fge
Windows上のネイティブメカニズムは、ディレクトリの名前が変更された/移動されたが特定のイベントが送信されたときに変更されないディレクトリハンドルを使用します。これは問題ではありませんが、javaではこれらのウィンドウ固有のイベントを検出する方法も、実際のディレクトリハンドル値を取得して調べる方法もありません。 – rjezek