Home - PatternDirClean/PDFileWatch GitHub Wiki

Icon

使用

请导入其 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

WaServerLoop 是一个抽象的接口。

WaServer 提供监控路径以及触发路径的方法,内部管理一个线程,用于接收文件变化的消息。但是具体监控方法有多种变种。

Loop 管理回调池并在适当的时候由 WaServer 触发,回调池中,每个事件有一个对应的回调链。不同的监控方式会返回不同的 Loop 实现,不同的实现有不同的触发条件过滤。

Loop 会按顺序触发回调。传入的处理接口必须返回 LoopState 枚举来标识状态。根据状态可中断回调链或中断当前 WaServer 中的事件获取。

  • LoopState.WATCH_NEXT // 继续触发回调链中的下一个回调
  • LoopState.WATCH_DOME // 停止回调链处理,不触发下一个回调
  • LoopState.WATCH_CLOSE // 停止回调链处理并调用当前 Loop 对象的 close() 方法,同时会中断 Waserver 中本次触发的事件列表处理

所有工具都可以在索引类 PDFileWatch 类中找到对应的快速构造方法

⚠️ **GitHub.com Fallback** ⚠️