2012-10-15 94 views
2

我正在嘗試使用Java 7的WatchService來監視文件夾。我希望它監視正在添加到WatchService註冊路徑的任何文件或文件夾。使用Java WatchService監視文件夾內的文件夾

如果我將一個文件夾添加到註冊路徑中,它會正確檢測它爲ENTRY_CREATE並返回watchEvent.context()中文件夾的名稱。但是,如果我將文件夾添加到該文件夾​​中而不是再次檢測到它,但watchEvent.context()會返回相同的文件夾和ENTRY_MODIFY,因爲該文件夾已通過添加其他文件夾進行修改。

所以我理解這一點,但不知道我是否應該在結構內註冊的每個文件夾,或只是註冊的頂層文件夾和收聽或創建和修改

+0

http://docs.oracle.com/javase/tutorial/essential/io/examples/WatchDir.java應該是有用的,它顯示瞭如何通過步行FileTree遞歸地添加WatchKeys –

回答

2

沒有爲跨平臺的直接支持。對於Windows,有一個ExtendedWatchEventModifier.FILE_TREE可以遞歸地觀看一個目錄。但是,在Mac或Linux上沒有相應的功能。另外請注意,ExtendedWatchEventModifier是擴展名,不屬於標準定義。

你必須聽取CREATE和DELETE。當創建(刪除)的對象是一個目錄時,您需要在子目錄中添加(刪除)新的監視。

+0

謝謝,你的意思是這個http:///jpathwatch.sourceforge.net/。看起來它現在可能支持OSX,但似乎我更願意只註冊每個文件夾 –

+0

我相信這是很多WatchService概念的起源。但它也是OpenJDK7的一部分:http://www.docjar.com/html/api/com/sun/nio/file/ExtendedWatchEventModifier.java.html 請注意,這是一個com.sun。*類。 –