JDK 7 Watchkey pollEvents在复制大量文件时未捕获ENTRY_CREATE或ENTRY_MODIFY

时间:2012-10-24 14:10:54

标签: java filesystems java-7 nio2

我正在尝试查看对特定文件夹进行的所有修改。 当我复制一个包含2~5个子文件夹的文件夹,每个子文件夹有2~3个文件。一切都很好。

当我复制复杂的文件夹结构时出现问题。 例如,当我复制任何示例Web应用程序文件夹(仅用于测试目的)时,WEB-INF文件夹中有许多源文件和classes文件夹中的子文件夹,以及lib文件夹中的大量jar等等。

许多文件的“ENTRY_CREATE”和“ENTRY_MODIFY”的大量文件事件正在被遗漏。

NIO2 Watcher API是否不可靠?

我正在使用Oracle网站中记录的以下代码段。

WatchKey watchKey = folderPathToMonitor.register(watchService,StandardWatchEventKinds.ENTRY_CREATE,
                StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY);

这就是我捕捉事件的方式: 代码正好在这里 - http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/essential/io/examples/WatchDir.java

我复制,说出30个文件夹中的500个文件 理想情况下,必须通知ENTRY_CREATE和ENTRY_MODIFY以获取尽可能多的文件和文件夹。 但是捕获的最大事件(ENTRY_CREATE和ENTRY_MODIFY俱乐部)不会超过280,而应该为530个文件和文件夹注册至少530个ENTRY_CREATE事件。

我错过了什么或者必须添加到oracle.com的观看代码? 对此有任何建议都非常感谢。

1 个答案:

答案 0 :(得分:2)

确定。用过jnotify并解决了这个问题。非常直截了当。不得不做一些代码来忽略同一操作的多个事件。但是让它运转起来。 在 - http://jnotify.sourceforge.net/

获取jnotify