WatchKey.reset()返回false时如何正确恢复?

时间:2017-05-18 02:13:41

标签: java-8 nio

我有一个长期运行的过程,并且会观看'文件更改的目录。

新的Java 8'观察者' API非常清楚WatchKey.reset()必须在WatchService.take()返回的引用上调用WatchKey.reset()。注意:WatchKey.isValid()的返回结果与WatchKey.reset()匹配。

昨天,我的长时间运行过程发现了许多文件更新,而true通常会返回WatchKey.reset()。但是,由于我不理解的原因,只有一次致电false的人回复了false

  1. 来自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;
  2. 如何从此状态恢复?我希望继续监视目录以进行文件更改。 official tutorialdocumentation无法解释如何执行此操作。
  3. 对于那些不太熟悉这个新API的人,这里有一些设置代码:

    create-react-app

0 个答案:

没有答案