java - 为什么Path类中的register方法返回WatchKey? (观看服务 Api,Java SE 7)

标签 java watchservice

观看服务 api ( https://docs.oracle.com/javase/tutorial/essential/io/notification.html ) 看起来有点复杂且违反直觉。所以我很困惑如何正确使用它。让我们按照上面网址中的指南进行操作。

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;
    }
}

最佳答案

你是对的,键只有在有事件时才有用,这通常是通过轮询观察者来完成的。但我想也可以直接定期轮询 key ,而不通过观察者。 javadoc对此不是很清楚。

这个API确实有点难用。我做了一个实用程序类_FileMonitor ,如果您阅读了源代码,正确使用 watcher API 一点也不简单。您可以考虑使用我的实用程序类。

关于java - 为什么Path类中的register方法返回WatchKey? (观看服务 Api,Java SE 7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30742336/

相关文章:

Java WatchService 不适用于某些文件夹

java - 闭包编译器 : create_name_map_files from Java API

java - 按字母顺序比较数组

java - 定时器无法正常工作(Java)

Java 8 Stream API 查找与属性值匹配的唯一对象

java - 为什么使用 WatchService 检测文件更改会出现延迟? ( java )

Java 监视服务 : Not Working for Remote Files mounted in the local Server

java - Java WatchService 是每个 JVM 还是一个应用程序可以启动多个?

java - 如何解决java中的无效线程访问

java - Java 7 WatchService 资源释放