簡體   English   中英

Java:監視目錄中的更改

[英]Java: Watching a Directory for Changes

我想創建一個偵聽器以遞歸檢測目錄更改(主目錄及其子目錄)。 經過網絡搜索后,我發現此鏈接說明了如何使用api完全滿足我的需求的Package java.nio.file中的WatchService類的用法,但不幸的是,它僅在Java 7中可用! 然后我再次返回搜索以找到一個允許相同並且兼容Java 5和Java 6的框架 ,但是又出現了一個問題,因為遞歸可用於Windows,我的應用程序應該使用Linux! 您能給我一個解決方案嗎:另一種框架,一種執行方法。

我認為您做得很好,發現了一個很棒的庫jpathwatch。 我不明白您的遞歸問題是什么:在此庫文檔中,我還沒有看到對linux的任何限制。

但是,如果出於某種原因jpathwatch無法在Linux上為您提供幫助,那不是問題:您可以自己運行du命令。 請參閱此參考: http : //linux.about.com/library/cmd/blcmdl1_du.htm

如果您是我,我可能會執行以下操作:編寫循環運行du的簡單腳本。 然后從連續讀取腳本輸出並對其進行分析的單獨線程中,從Java運行此腳本。

這是一種功能,需要支持JVM或本機庫,例如您在Windows中找到的庫。 如果在Java for Linux中找不到任何內容,建議您使用二進制Linux庫(在另一個問題中),然后在此之上構建Java本機類。

希望其他人能對您有所幫助。

要在Linux上執行此操作,您需要使用Java 7或使用inotify的本機庫。 您是否考慮過JNotify庫 它看起來像處理遞歸到子目錄,包括新創建的子目錄。

看看http://download.oracle.com/javase/tutorial/essential/io/notification.html

“ java.nio.file包提供了一個名為Watch Service API的文件更改通知API。該API使您可以向watch服務注冊一個目錄(或多個目錄)。注冊時,您可以告訴服務您事件的類型對以下內容感興趣:文件創建,文件刪除或文件修改。當服務檢測到感興趣的事件時,它將轉發到已注冊的進程。已注冊的進程具有專用於監視任何事件的線程(或線程池)它已經注冊。當事件發生時,將根據需要進行處理。”

更新:糟糕,您剛剛意識到您已經看到了這一點。 我沒有意識到這僅在Java 7中:-(

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM