2012-10-18 117 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->->>宏来使代码更具可读性。