2012-10-18 79 views
5

我通常希望輪詢文件以進行更改(最後一次寫入時)。當文件確實改變了以前的值時,我希望執行一些功能。形式的東西。輪詢文件以進行更改?

(poll-for-changes file-str on-change-fx current-value) 

其中

  1. file-str僅僅是指定文件的位置
  2. on-change-fx一個字符串是函數應該被稱爲當file-str變化的文件。我們假設on-change-fx應該將File對象指向file-str作爲參數。
  3. current-value以毫秒爲單位的文件當前值。您可以將其設置爲0以保證此函數至少運行一次,或者在實際檢測到更改時將其設置爲僅運行此函數的實際值。

我只是想以最清晰,最簡潔的Clojurist方式實現此功能。謝謝。

回答

5

如果你正在查詢一個目錄或文件並對其進行操作,我認爲watchtower是很好的看看。

Java 7有一個WatchService,它使用文件系統事件來響應更改。在這種情況下,您根本不會進行輪詢,但會阻止未來的文件事件。我認爲Clojure沒有任何項目可以利用它,儘管我花了一些時間來編寫small library。它的來源is here

我沒有聲稱我的程序庫甚至是完整的,但它確實使用了Java 7服務,因此您可以在自己的項目中使用它來獲取靈感。

5

有,你可以在這裏使用兩種方法:

  1. 使用Java的互操作和the Java 7 WatchService API

  2. 檢查和學習existing idiomatic, concise code(在這種情況下由斯圖爾特謝拉),做你想要的東西。注意它也使用Java Interop。

我認爲選項#1是你最好的選擇,而且功能的實現應該是直截了當的。您可能需要使用doto->->>宏來使代碼更具可讀性。