1

私はnio2のファイルウォッチャーについて学んでいます.サンプルファイルには、ファイルをマップしてキーを監視するマップ変数があり、次のコードがありました:

            for (;;) {

                // wait for key to be signaled
                WatchKey key;
                try {
                   key = watcher.take();
                } catch (InterruptedException x) {
                   return;
                }

                Path dir = keys.get(key);
                if (dir == null) {
                    System.err.println("WatchKey not recognized!!");
                    continue;
                }
                (...)
            }

この例によると、監視サービスが時折誤検知 (アプリケーションが監視しているファイルにマップされていないキー) を返す可能性があると信じるようになりましたが、Oracle リファレンスではそのようなチェックは行われません。本当に辞書が必要かどうかはわかりません。nio2 の経験がある人は、これに光を当てることができますか?

4

1 に答える 1

0

私の正直な意見では、これは、この WatchKey/Path マッピングのイベントを引き続き処理していることを保証する最も簡単な方法です。

キュー内の同じファイルに対して 2 つのイベントがある場合。イベント #1 を処理しているときに、このパスのイベントの処理を停止することにしました。

その後、WatchService (イベント #1 と同じパス) から次のキーを取得すると、すぐにそれを無視できます ( continue)。

于 2014-05-13T10:57:52.970 に答える