2010-09-28 45 views
6


有沒有人知道如何使用java監控文件夾?或者任何人都可以給我一點,我怎麼能開始這個。這是我的想法。
是否可以使用java代碼監控文件夾?

啓動一個線程來掃描文件夾更改,這可能是創建,刪除,更新此文件夾中的文件或其他事情發生,如上次更新。
但在這種情況下,您必須控制線程循環。如果這個線程循環沒有得到很好的控制,那麼這將浪費CPU,並可能導致致命的問題。

或者,是否有任何框架或一些演示代碼來做到這一點?希望我們能找到一個更好的方法來做到這一點。十分感謝。

回答

1

你的想法並不差。

要在java中監視文件夾,通常的方法是使用循環在單獨的線程中控制它。 爲了節省CPU,您可以使用速度(每n秒檢查一次)。

然後,要通知此線程的更改,可以使用"Observer" design pattern

+0

是的,我知道這個外觀應該照顧好。檢查文件夾每n秒會做得很好,但我應該如何確定這樣一個秒,因爲此代碼將運行不同的CPU和不同的操作系統。這並不容易,如果我想節省CPU和其他的東西。但是,謝謝你的回覆。 – 2010-09-28 08:45:29

0

不,它不是。還有一些圖書館做投票給你,如:

http://mindprod.com/jgloss/filemonitor.html是免費的,http://www.teamdev.com/jxfilewatcher不是免費

理想情況下,你想避免輪詢和有變化的即時通知要做到這一點。需要特定於操作系統的JNI代碼才能掛接到本機文件系統,這也需要很高的權限

+0

,這意味着要爲java編寫跨平臺代碼,這對我來說並不合適。 – 2010-09-28 08:42:54

+0

jxfilewatcher不是免費的。我想也許我們可以找到一個開源軟件或庫來做到這一點。如果沒有,我會寫。 – 2010-09-28 08:47:15

+0

我發送的第一個鏈接是免費的,我認爲 – 2010-09-28 09:02:20

13

JDK7的java.nio.file包中有一個WatchService以支持文件更改通知。您可以使用它來監視目錄中的更改。這在可用的情況下使用本地設施,否則使用輪詢等基本機制。 Here是一個貼子。

現在,您可以嘗試jpathwatch,它是WatchService接口的實現,它使用本機操作系統功能而不是輪詢。

+0

我想我必須等待很長時間,因爲我現在的jre是jre6。 – 2010-09-28 08:39:45

+0

我已經檢查了這個WatchService,這很好,但只有可惜它只會在jdk7之後纔可用。 – 2010-09-28 08:50:37

1

純Java的方式是分離一個線程輪詢目錄並跟蹤更改。

更有效的方法是編寫一個操作系統特定的庫(您可能必須使用C或C++),它可以使用特定於操作系統的工具來獲取通知(通過回調到您的Java代碼中),並通過JNI打電話給JNI

+0

好主意。但如果我使用操作系統特定的庫,這意味着我的應用程序將無法在不同的操作系統中運行。 – 2010-09-28 08:41:38

+0

是的。你可以這樣編寫代碼,如果你運行在一個你有庫的操作系統上,代碼就會使用它,否則它默認爲純Java解決方案。事實上,正如其他答案中提到的,這是Java 7中發生的情況 – PaulJWilliams 2010-09-28 08:52:24

相關問題