其實還是全文檢索的需求。對某個目錄下的文檔都做了全文檢索。自然會關注這些文檔的變化。
最開始的方案是輪詢。每隔一段時間就輪詢一次。當做全文檢索的文件比較多的時候,這種
輪詢需要花費很多的時間。而且,每個文檔都要檢查是否有更新,就意味着每次都要查數據庫,
對數據庫的壓力也有一些。總之感覺不爽。
於是想着替代方案,最好就是能監聽文件的變化。只有文件發生變化的時候,纔去更新數據庫,
並且更新全文的索引。於是用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的實現了。
JNotify監聽文件變化
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
JNotify的使用
lbb548246
2020-02-23 11:53:55
JNotify文件目錄監控
lbb548246
2020-02-23 11:53:55
JNotify使用 樣例
lbb548246
2020-02-23 11:53:55
JNotify的使用
lbb548246
2020-02-23 11:53:55
JNotify文件目錄監控
lbb548246
2020-02-23 11:53:55
JNotify使用 樣例
lbb548246
2020-02-23 11:53:55
JNotify使用
lichuanbao1234
2018-08-30 23:40:36