我正在学习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/

10-10 19:22