如何处理 JAVA WatchService 溢出事件?

3

我希望使用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;
    }
}
1个回答

3
希望您已经找到了解决方案。通常的想法是处理新创建的文件并将已处理的文件移动到不同的目录中。
处理此问题有两个可能的选项:
1. 防止发生OVERFLOW 2. 如果仍然发生OVERFLOW,则处理它
防止OVERFLOW发生的思路是快速清空操作系统缓冲区,并用事件信息填充队列,然后让多个线程处理队列中的事件。
如果OVERFLOW仍然发生,则:
- 停止监听事件 - 清空队列 - 在目录上调用listFiles() - 再次开始监听事件 - 将列出的文件插入队列中。

嗨!您能否提供一些简单的示例来实现您的建议?如果您能提供一个链接来展示这些示例,那将不胜感激,因为我正在处理相同的问题,但实在找不到任何您所提出的建议的实现。谢谢! - Sammy65

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接