2

我正在尝试查看对特定文件夹所做的所有修改。当我复制一个包含 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 的观看代码中的吗?对此的任何建议都将受到高度赞赏。

4

1 回答 1

2

行。使用 jnotify 并解决了这个问题。很简单。不得不编写一些代码来忽略同一操作的多个事件。但让它工作。获取 jnotify - http://jnotify.sourceforge.net/

于 2012-11-23T13:11:47.127 回答