鹰眼(Hawk):文件监控库
鹰眼(Hawk),一个用Clojure语言编写的高效文件和目录监控库,它的核心设计是为了解决你的实时文件变动监测需求。无论是Java 7的java.nio.file.WatchService
API在某些平台上的不足,还是在OS X上遇到的性能问题,Hawk都能以优雅的方式解决。它会智能选择适合的实现方案,让你只需专注在代码上,不必担心底层细节。
安装与引入
想要体验Hawk的强大?简单地将以下依赖添加到你的project.clj
文件中:
[hawk "最新版本号"]
你可以直接从Clojars仓库获取Hawk的最新版本。
使用方法
简单监控
初始化一个基础的监控任务就像这样:
(ns hawk.sample
(:require [hawk.core :as hawk]))
(hawk/watch! [{:paths ["src/main/hawk"]
:handler (fn [ctx e]
(println "event: " e)
(println "context: " ctx)
ctx)})])
这里的:handler
函数会在每次文件变动时被调用,接收上下文(ctx)和事件(e)作为参数。
过滤器机制
想要只监听特定类型的文件?使用:filter
配置项:
(hawk/watch! [{:paths ["src/main/hawk"]
:filter hawk/file?
:handler (fn [_ _]
(println "look ma, just files!"))}])
Hawk内置了一些过滤器,比如hawk/file?
,但你也可以自定义任何满足条件的函数。
状态管理
通过:context
初始化并更新状态:
(hawk/watch! [{:paths ["src/main/hawk"]
:context (constantly 1)
:handler (fn [ctx _] (inc ctx))}])
:context
函数会返回新的上下文状态。
多组并行监控
Hawk支持一次启动多个监控组,并行处理:
(hawk/watch!
;; 创建两个监控组
[{:paths ["src/main/hawk"]
:context (constantly 1)
:handler (fn [ctx _]
(println "I'm always first!")
(inc ctx))}
{:paths ["src/test/hawk"]
:context (fn [ctx] (inc ctx))
:handler (fn [_ _]
(println "I'm always second place."))}]
;; 创建第二个监控组
[{:paths ["src/main/hawk"]
:context (constantly 3)
:handler (fn [_ _]
(println "I'm also always first!"))}])
轮询监控
在无法收到操作系统文件变更通知的场合(如虚拟环境),Hawk提供了轮询监控机制作为备份:
(hawk/watch! {:watcher :polling}
[{:paths ["src/main/hawk"]
:handler (fn [ctx e]
(println "event: " e)
(println "context: " ctx)
ctx)}])
你可以通过:sensitivity
调整轮询频率。
停止监控
当不再需要监控时,用hawk/stop!
来结束:
(let [watcher (hawk/watch! [...])]
(hawk/stop! watcher))
现在,开始愉快地监视文件变化吧!
许可证
鹰眼(Hawk)由Will Farrell创建,并遵循Eclipse公共许可证1.0或更高版本。
鹰眼(Hawk),为你的眼睛提供犀利的洞察力,让文件变动无处遁形。无论你是开发者,测试者,或是对文件系统有监控需求的人,Hawk都是你不二的选择。它集易用性与灵活性于一身,伴你在代码世界里翱翔。立即尝试,享受编程带来的乐趣与效率提升!