このJava の例を見ると、キーの状態について、オラクルは次のように述べています。
Readyは、キーがイベントを受け入れる準備ができていることを示します。最初に作成されたとき、キーは準備完了状態にあります。
Signaledは、1 つ以上のイベントがキューに入れられていることを示します。キーが通知されると、reset メソッドが呼び出されるまで、キーは準備完了状態ではなくなります。
WatchKey
javadocで:
キーがシグナル状態にある間に検出されたイベントはキューに入れられますが、監視サービスから取得するためにキーが再度キューに入れられることはありません
key.pollEvents()
ドキュメントには、 と の間で生成されたイベントがどうなるかは記載されていませんkey.reset()
。キーがリセットされるまでイベントはバッファリングされ、キーはリセット直後に通知されると想定されています。これは、以下のテストでサポートされているようです。
公式ドキュメントを教えていただけますか?またはドキュメントの欠如についての議論に?
Path dir = Paths.get("test");
WatchService watcher = dir.getFileSystem().newWatchService();
dir.register(watcher, CREATE, DELETE, MODIFY);
while (true) {
WatchKey key = watcher.take();
System.out.println("polling.");
for (WatchEvent<?> event : key.pollEvents()) {
... (details removed) ...
System.out.format(" Event %s in [%s] for entry [%s]%n",
event.kind().name(), registeredDir, childPath);
try { Thread.sleep(20000); } catch (InterruptedException e) { ; }
}
System.out.println("resetting.");
key.reset();
}
... によって許可された 20 代以内にsleep()
、私は次のことを行いました。
- ファイルを作成し、
- 編集して、保存して、
- 名前を変更し、
- 編集して、保存して、
- 消して
出力:
polling.
Event ENTRY_CREATE in [test] for entry [test\file1.txt]
resetting.
polling.
Event ENTRY_MODIFY in [test] for entry [test\file1.txt]
Event ENTRY_DELETE in [test] for entry [test\file1.txt]
Event ENTRY_CREATE in [test] for entry [test\file2.txt]
Event ENTRY_MODIFY in [test] for entry [test\file2.txt]
Event ENTRY_DELETE in [test] for entry [test\file2.txt]
resetting.
わかりました。