【发布时间】:2014-08-12 02:15:09
【问题描述】:
看着这个Java example,关于关键状态,Oracle 说:
Ready 表示密钥已准备好接受事件。当第一次 已创建,密钥处于就绪状态。
Signaled 表示一个或多个事件已排队。一旦关键 已发出信号,它不再处于就绪状态,直到复位 方法被调用。
在WatchKeyjavadoc:
在按键处于信号状态时检测到的事件已排队,但 不要导致密钥重新排队以从手表中检索 服务
文档没有说明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();
}
...在sleep() 允许的 20 秒内,我做到了:
- 创建一个文件,
- 编辑,保存,
- 重命名,
- 编辑,保存,
- 删除
输出:
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.
Tks.
【问题讨论】:
标签: java events watchservice