Home - PatternDirClean/PDFileWatch GitHub Wiki
请导入其 jar
文件,文件在 发行版 或项目的 jar 文件夹下可以找到
发行版中可以看到全部版本
项目下的 jar 文件夹是当前最新的每夜版
PDFileWatch_bin.jar 为包含了依赖库的包,PDFileWatch.jar 为不包含依赖库的包
接着根据自己的环境进行导入
具体导入方法请 百度 或者 Google
依赖的同系列的项目
监听单个文件
public class Main {
public static void main(String[] arg) {
SendWatch sendWatch;
SendLoop loop;
try {
// 构建监听服务
sendWatch = PDFileWatch.sendWatch().build();
// 注册,监听单个文件的所有事件,返回本次监听的实例
// WaServer.KINDS_ALL 是一个数组,包含所有的 WatchEvent.Kind 事件,除了 OVERFLOW
loop = sendWatch.watchFil(Path.of("a.tmp"), WaServer.KINDS_ALL);
// 监听创建事件回调,允许多个回调按顺序触发,内部有一个回调链
loop.addCall(StandardWatchEventKinds.ENTRY_CREATE, (event, path) -> {
// 事件触发处理
// 允许回调链向下继续触发
return LoopState.WATCH_NEXT;
});
// 监听默认回调,如果当前触发的事件没有注册对应的回调进行处理,则会触发该回调链
loop.addDefaCall((event, path) -> {
// 事件触发回调
// 允许继续触发
return LoopState.WATCH_NEXT;
});
// 不需要继续监听时记得关闭当前监听实例
loop.close();
// 不需要进行任何文件监听时记得关掉该服务
sendWatch.close();
} catch ( IOException e ) {
e.printStackTrace();
}
}
}
内部已有并发处理,启动服务后会有一个线程再后面负责监听系统传来的变化,所以在不需要时记得
close()
服务和监听对象
使用 WaServer
提供文件监控服务并触发对应事件的管理对象 Loop
WaServer
和 Loop
是一个抽象的接口。
WaServer
提供监控路径以及触发路径的方法,内部管理一个线程,用于接收文件变化的消息。但是具体监控方法有多种变种。
Loop
管理回调池并在适当的时候由 WaServer
触发,回调池中,每个事件有一个对应的回调链。不同的监控方式会返回不同的 Loop
实现,不同的实现有不同的触发条件过滤。
Loop
会按顺序触发回调。传入的处理接口必须返回 LoopState
枚举来标识状态。根据状态可中断回调链或中断当前 WaServer
中的事件获取。
-
LoopState.WATCH_NEXT
// 继续触发回调链中的下一个回调 -
LoopState.WATCH_DOME
// 停止回调链处理,不触发下一个回调 -
LoopState.WATCH_CLOSE
// 停止回调链处理并调用当前Loop
对象的close()
方法,同时会中断Waserver
中本次触发的事件列表处理
所有工具都可以在索引类 PDFileWatch 类中找到对应的快速构造方法