gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:50:58 24 4
gpt4 key购买 nike

Watching Service 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com