我想通過java監控系統上選定目錄的更改。我在java 7中對watchservice有點想法。但watchservice只返回發生更改事件(MODIFY,DELETE)的目錄名稱。 另一方面,我想要所有關於變化的信息,比如發生更改的用戶,發生更改的時間等。通過Java監控文件系統更改
這就像是想讀取NTFS文件系統上的更改日誌。 Java中是否有其他方式可以異步記錄這些更改? ...
在此先感謝。
我想通過java監控系統上選定目錄的更改。我在java 7中對watchservice有點想法。但watchservice只返回發生更改事件(MODIFY,DELETE)的目錄名稱。 另一方面,我想要所有關於變化的信息,比如發生更改的用戶,發生更改的時間等。通過Java監控文件系統更改
這就像是想讀取NTFS文件系統上的更改日誌。 Java中是否有其他方式可以異步記錄這些更改? ...
在此先感謝。
不知道,如果你要導入庫添加到您的項目,但能力的commons-io的有可能會滿足您的需求FileAlterationObserver:
http://commons.apache.org/io/api-release/org/apache/commons/io/monitor/FileAlterationObserver.html
如果您正在使用java7看看 java.nio.file.FileSystem 和 WatchService
更多信息請參考 Oracle tutorial
+1爲「開箱即用」解決方案:) – quaylar 2012-04-04 09:36:14
但我已經通過問題 – 2012-04-04 10:50:46
如果你只想得到通知符如果發生什麼事情,您可以使用答案中發佈的某個庫。
如果你想自己做一個小例子(你只限於Windows),請看看這個article about Java Native Interface。使用ReadDirectoryChanges函數,您可以決定接收異步通知。
如果你真的需要知道世衛組織做出的改變然後...祝你好運!據我所知(僅適用於Windows),這不是一個簡單的主題,因爲Windows不保存這些信息。你可以通過JNI與Object Auditing得到它,但你必須啓用它,它會減慢你的系統。有關詳細信息,請參閱this post。
中提到的watchservice謝謝。提供的信息非常有幫助。其實我正在尋找JNI調用來做同樣的事情,但你提到的NativeCall與我的要求非常匹配。 – 2012-04-04 10:22:38
@Shailesh_B沒有一個JNI調用來做到這一點,否則它將被列爲JNI規範,並且如果沒有一個本地的Windows API,它也不能完成。 – EJP 2012-04-05 00:06:30
@EJP是的,「風險」是必須編寫一個小的本地DLL來做一個暴露的「簡單」C API的髒作業 – 2012-04-05 07:20:51
您可能會發現Event Programming Example: Google Guava EventBus and Java 7 WatchService有用。我正在嘗試執行異步文件監視,並且可能會使用此的一些衍生工具。
或者,如果您願意跳過對WatchService的直接管理,請提供Camel file endopoint a try。
+1這是一個非常好的圖書館,當某些事情發生變化時他無法獲得,但他不知道是誰做出的。 – 2012-04-04 09:30:25
這是一個很好的圖書館。但它聽起來它使用輪詢技術,而我想爲文件系統更改異步事件。無論如何,我會更多地探討這個lib。是的,我有能力導入添加庫。 – 2012-04-04 09:48:21