WatchService
アプリケーションワークベンチとの同期データファイルに使用しています。監視対象のディレクトリの名前を変更/移動すると、イベントが発生せず、WatchKey が無効になることもありません。名前を変更したディレクトリから引き続きイベントを取得しますが、私が知る限り、WatchKey.watchable()
元のディレクトリ パスを返す以外に WatchKey の実際のパスを見つける方法はありません。アプリケーションをできるだけ軽量に保ちたいので、監視されているディレクトリを変更に対してロックする必要を避けたいと思います。
Windows 7 の JDK 7u10 でこの問題が発生しました
ディレクトリをロックしたり、すべてのディレクトリをルートに監視したりせずに、この問題の回避策を知っていますか?
アップデート
Linux でも同じ動作を観察しました。
これまでのところ、私には3つのオプションがあるようです。
1) データ ディレクトリを移動しないというユーザーの規律に依存します。未定義の動作につながる可能性があるため、このオプションはあまり好きではありません。
2) より広範な非標準のネイティブ ライブラリを使用する
3) 上位ディレクトリにウォッチドッグの階層を作成します。ENTRY_DELETE
このイベント (またはOVERFLOW
) は、実際に監視されているディレクトリが移動または削除された時点で表示される必要があり、無効であるため、これらはイベントのみを受け入れます。