轮询文件以进行更改?

Ste*_*gle 6 clojure

它通常是一种模式,我希望轮询文件以进行更改(最后一次编写时).当文件确实从以前的值改变时,我希望执行一些功能.形式的东西.

(poll-for-changes file-str on-change-fx current-value)
Run Code Online (Sandbox Code Playgroud)

哪里

  1. file-str 只是一个指定文件位置的字符串
  2. on-change-fx是文件处于file-str更改时应调用的函数.让我们说on-change-fx应该将File对象指向file-str为参数.
  3. current-value文件的当前值,以毫秒为单位.您可以设置为0以保证此函数至少运行一次,或者设置为实际值以仅在实际检测到更改时运行此函数.

我希望这个功能以最清晰,最简洁的Clojurist方式实现.谢谢.

noa*_*hlz 5

您可以在此处使用两种方法:

  1. 使用Java interop和Java 7 WatchServiceAPI.

  2. 检查并学习现有的惯用,简洁的代码(在本例中由Stuart Sierra),它可以满足您的需求.注意它也使用Java Interop.

我认为选项#1是你最好的选择,并且该功能的实现应该是直截了当的.你可能会希望使用doto->->>宏使代码更易读.


Nic*_*uer 5

如果您希望轮询一个或多个文件并对其进行操作,我认为watchtower这很好看.

Java 7有一个WatchService,它使用文件系统事件来响应变化.在这种情况下,您根本不进行轮询,而是阻止将来的文件事件.我不认为Clojure中有任何项目可以利用它,虽然我花了一些时间用它来编写一个小型库.它的来源就在这里

我并不认为我的库甚至是完整的,但它确实使用了Java 7服务,因此您可以在自己的项目中使用它来获取灵感.