11

WatchServiceアプリケーションワークベンチとの同期データファイルに使用しています。監視対象のディレクトリの名前を変更/移動すると、イベントが発生せず、WatchKey が無効になることもありません。名前を変更したディレクトリから引き続きイベントを取得しますが、私が知る限り、WatchKey.watchable()元のディレクトリ パスを返す以外に WatchKey の実際のパスを見つける方法はありません。アプリケーションをできるだけ軽量に保ちたいので、監視されているディレクトリを変更に対してロックする必要を避けたいと思います。

Windows 7 の JDK 7u10 でこの問題が発生しました

ディレクトリをロックしたり、すべてのディレクトリをルートに監視したりせずに、この問題の回避策を知っていますか?

アップデート

Linux でも同じ動作を観察しました。

これまでのところ、私には3つのオプションがあるようです。

1) データ ディレクトリを移動しないというユーザーの規律に依存します。未定義の動作につながる可能性があるため、このオプションはあまり好きではありません。

2) より広範な非標準のネイティブ ライブラリを使用する

3) 上位ディレクトリにウォッチドッグの階層を作成します。ENTRY_DELETEこのイベント (またはOVERFLOW) は、実際に監視されているディレクトリが移動または削除された時点で表示される必要があり、無効であるため、これらはイベントのみを受け入れます。

4

1 に答える 1

6

私の理解では、ディレクトリの名前を変更すると、名前が変更されたディレクトリではなく、新旧の親ディレクトリでファイルシステムイベントが生成されます。「 iNotifyは監視対象ファイルの移動先を教えてくれますか?」の回答によると 、宛先ディレクトリを監視していない限り、OSは何かが移動された場所を通知できません。(さらに、Java 7/8では、MOVEイベントは監視サービスの実装によって処理されません。)

アップデート

標準のJava7APIを使用して、(プラットフォーム固有の)拡張イベントのサポートを追加するjpathwatchプロジェクトを試すことができWatchServiceます。

参照:

于 2013-01-13T14:05:30.757 に答える