2012-10-24 24 views
0

我正在嘗試觀察正在對特定文件夾執行的所有修改。 當我複製一個文件夾包括2〜5個子文件夾,每個文件夾有2〜3個文件。一切都很好。JDK 7 Watchkey pollEvents在捕獲大量文件時無法捕獲ENTRY_CREATE或ENTRY_MODIFY

當我複製複雜的文件夾結構時出現問題。 例如,當我複製WEB-INF文件夾中的classes文件夾中有大量源文件和子文件夾以及lib文件夾中有大量jar文件等等的任何示例Web應用程序文件夾(僅用於測試目的)時,等等。

大量文件事件的「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

我複製,說一下500文件30個文件夾和 理想ENTRY_CREATE和ENTRY_MODIFY必須通知儘可能多的文件和文件夾。 但是捕獲的最大事件數(ENTRY_CREATE和ENTRY_MODIFY聚合在一起)不會超過280,而對於已複製的530個文件和文件夾,應該僅註冊最少530個ENTRY_CREATE事件。

我錯過了或不得不添加到來自oracle.com的觀看代碼的任何事情? 有關這方面的任何建議,非常感謝。

+0

一個快速的想法....你檢查溢出?獲取任何? – Nicholas

+0

沒有任何溢出。 – Gyan

回答

0

好的。使用jnotify並解決了這個問題。非常簡單。必須編寫一些代碼來忽略同一操作的多個事件。但讓它工作。 得到jnotify在 - http://jnotify.sourceforge.net/