如何处理JAVA WatchService Overflow事件?

时间:2016-08-22 10:04:08

标签: java java-8 nio watchservice

我想使用JAVA检测文件的 Creation 修改。我使用的是JDK 7提供的 WatchService API。

因此,当在给定实例上创建多个文件时,监视服务可以处理一个级别,然后生成 OVERFLOW 事件。

下面提供了示例代码部分。

为了检测所有文件的创建,当有和溢出事件被抛出时,最适合处理这种情况的方法是什么?

for (WatchEvent<?> event : key.pollEvents()) {
    WatchEvent.Kind kind = event.kind();
    // TBD - provide example of how OVERFLOW event is handled
    if (kind == OVERFLOW) {
         System.err.println("OVERFLOW !");
         continue;
    }
}

1 个答案:

答案 0 :(得分:1)

希望您已经找到了解决方案。通常的想法是处理新创建的文件并将处理过的文件移动到不同的目录。

有两种可能的方法可以解决这个问题:

  • 防止出现过剩
  • 如果仍然发生,请处理OVERFLOW

防止出现OVERFLOW 我们的想法是快速清除操作系统缓冲区并使用事件信息填充队列,然后让多个线程处理队列中的事件。

如果仍然发生,请处理OVERFLOW

如果仍然出现OVERFLOW,

  • 停止收听活动
  • 清除队列
  • 在目录
  • 上调用listFiles()
  • 再次开始听事件
  • 将列出的文件插入队列