如何处理JAVA WatchService Overflow事件?

我想使用JAVA检测文件的创建和修改.我正在使用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;
    }
}

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

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

>防止发生溢出
>如果仍然发生,请处理溢出

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

如果仍然发生,请处理溢出

如果OVERFLOW仍然出现,

>停止听事件
>清除队列
>调用目录上的listFiles()
>再次开始听事件
>将列出的文件插入队列中

点赞