JNotify監聽文件變化

其實還是全文檢索的需求。對某個目錄下的文檔都做了全文檢索。自然會關注這些文檔的變化。

最開始的方案是輪詢。每隔一段時間就輪詢一次。當做全文檢索的文件比較多的時候,這種

輪詢需要花費很多的時間。而且,每個文檔都要檢查是否有更新,就意味着每次都要查數據庫,

對數據庫的壓力也有一些。總之感覺不爽。

 

於是想着替代方案,最好就是能監聽文件的變化。只有文件發生變化的時候,纔去更新數據庫,

並且更新全文的索引。於是用google搜了一下。發現有不少實現方式還是我使用的那種,採用

輪詢的方式。而且大部分都是將關注的文件列表放在內存當中。這對於監聽量比較大的情況,就

不適合了。

 

還搜到兩種實現,一種是 JDK7 裏面的 NIO 的WatchService,這個也可以實現監聽。只要文件

發生變化,就會產生相應的事件。這個應該是一個不錯的解決方案。不過JDK7也還沒正式發佈,

想了想還是算了。另一種就是 jnotify 。其實還有一個類似的商業產品 JxFileWatcher ,不過因爲

要錢又不開源,我就沒去碰。

 

jnotify 使用起來非常簡單,
Java代碼  

    int watchID =JNotify.addWatch(path, mask, watchSubtree, new Listener());  

 

 

就可以添加對一個目錄的監聽,還可以選擇是否要監聽子目錄。mask和listener也非常簡單,
例子見: http://jnotify.sourceforge.net/sample.html

比較有意思的是它有個
 fileRenamed
 事件。如果只是改名,就會有這個事件,而不是一個刪除和
一個新建事件。另外要注意的一點就是它利用了操作系統的底層實現。因此,在windows下需要把
dll文件放在 java.library.path 目錄下。非常簡單,而且效果很好,文件被改動之後,實時的就產生
這樣的一個事件,非常不錯,比輪詢方便多了。

JDK7正式發佈以後,應該就可以用JDK7的實現了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章