为什么注册方法在路径类返回WatchKey?(观察服务Api, Java SE 7)



Watching Service api (https://docs.oracle.com/javase/tutorial/essential/io/notification.html)看起来有点复杂和反直觉。所以我不知道如何正确使用它。让我们按照上面的url指南来做。

WatchService watcher = FileSystems.getDefault().newWatchService();
Paths.get("C:/Path").register(watcher, 
  ENTRY_CREATE, 
  ENTRY_DELETE, 
  ENTRY_MODIFY) //return WatchKey object

register方法返回WatchKey对象。在指南中它通常被省略。这很奇怪。怎么用呢?它从寄存器返回的原因是什么?因为获取WatchKey的正常方式是这样的:

for (;;) {
    // wait for key to be signaled
    WatchKey key;
    try {
        key = watcher.take();
    } catch (InterruptedException x) {
        return;
    }
    for (WatchEvent<?> event: key.pollEvents()) {
        WatchEvent.Kind<?> kind = event.kind();
        //procees all kinds of events there
        if (kind == OVERFLOW) {
            continue;
        }
    }
    boolean valid = key.reset();
    if (!valid) {
      break;
    }
}

您是对的,键只有在具有事件时才有用,这通常通过轮询监视程序来完成。但我想也可以直接定期轮询键,而不需要通过监视程序。javadoc在这方面不是很清楚。

这个API确实有点难用。我创建了一个实用程序类_FileMonitor,如果您阅读了源代码,就会发现正确使用监视程序API一点也不简单。您可以考虑使用我的实用程序类。

相关内容

  • 没有找到相关文章

最新更新