我有一个长期运行的过程,并且会观看'文件更改的目录。
新的Java 8'观察者' API非常清楚WatchKey.reset()
必须在WatchService.take()
返回的引用上调用WatchKey.reset()
。注意:WatchKey.isValid()
的返回结果与WatchKey.reset()
匹配。
昨天,我的长时间运行过程发现了许多文件更新,而true
通常会返回WatchKey.reset()
。但是,由于我不理解的原因,只有一次致电false
的人回复了false
。
WatchKey.reset()
的返回值public static void main(String[] argArr)
throws IOException, InterruptedException {
final File dirPath = new File(argArr[0]);
if (! dirPath.isDirectory()) {
throw new IllegalArgumentException(argArr[0]);
}
final Path dirPath2 = dirPath.toPath();
try (final WatchService watchService = FileSystems.getDefault().newWatchService()) {
final WatchKey registerWatchKey =
dirPath2.register(
watchService,
StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_MODIFY,
StandardWatchEventKinds.ENTRY_DELETE);
try {
while (true) {
// blocking
final WatchKey watchKey = watchService.take();
final List<WatchEvent<?>> watchEventList = watchKey.pollEvents();
for (final WatchEvent<?> watchEvent : watchEventList) {
// use 'watchEvent'
}
final boolean isValid = watchKey.reset();
if (! isValid) {
// How to recover here? I want to continue monitoring dirPath2.
}
}
}
finally {
registerWatchKey.cancel();
}
}
}
的含义是什么?官方教程说:&#34;如果密钥不再有效,则目录无法访问,因此退出循环。&#34; 对于那些不太熟悉这个新API的人,这里有一些设置代码:
create-react-app