我正在学习nio2中的文件监视程序,并且一个示例文件具有一个Map变量,他们将文件映射到监视键,并具有以下代码:
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 Reference中他们没有进行此类检查。我现在不确定我是否真的需要字典。拥有nio2经验的人可以对此有所了解吗?
最佳答案
坦白地说,这是确保您仍在处理此WatchKey / Path映射的事件的最简单方法。
如果队列中的同一文件有两个事件。
在处理事件#1时,您决定停止处理此Path的事件。
之后,您从WatchService检索下一个键(与事件#1相同的路径),就可以立即忽略它(continue
)。
关于java - Nio2 WatchService,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23116659/