目 录CONTENT

文章目录

Hutool监听文件工具类的demo

在水一方
2022-09-25 / 0 评论 / 0 点赞 / 151 阅读 / 1,264 字 / 正在检测是否收录...

前言

实际业务中可能会有这样一些需求,就是需要监控某个文件或者目录的文件的变动,如果有变动需要做某些操作,看到hutool中对这这部分做了封装,用起来更加简单了,觉得还是非常实用的,记录一下

官网说明

很多时候我们需要监听一个文件的变化或者目录的变动,包括文件的创建、修改、删除,以及目录下文件的创建、修改和删除,在JDK7前我们只能靠轮询方式遍历目录或者定时检查文件的修改事件,这样效率非常低,性能也很差。因此在JDK7中引入了WatchService。不过考虑到其API并不友好,于是Hutool便针对其做了简化封装,使监听更简单

demo案例


@RestController
public class Watch {
    // 服务启动就执行该方法	
    @PostConstruct
    public void  monitor() {
        File file = FileUtil.file("D:\\test.xlsx");
        //这里只监听文件或目录的修改事件
        WatchMonitor watchMonitor = WatchMonitor.create(file, WatchMonitor.ENTRY_MODIFY);
        watchMonitor.setWatcher(new Watcher(){
            @Override
            public void onCreate(WatchEvent<?> event, Path currentPath) {
                Object obj = event.context();
                Console.log("创建:{}-> {}", currentPath, obj);
            }
            @Override
            public void onModify(WatchEvent<?> event, Path currentPath) {
                Object obj = event.context();
                Console.log("修改:{}-> {}", currentPath, obj);
            }
            @Override
            public void onDelete(WatchEvent<?> event, Path currentPath) {
                Object obj = event.context();
                Console.log("删除:{}-> {}", currentPath, obj);
            }
            @Override
            public void onOverflow(WatchEvent<?> event, Path currentPath) {
                Object obj = event.context();
                Console.log("Overflow:{}-> {}", currentPath, obj);
            }
        });
        //设置监听目录的最大深入,目录层级大于制定层级的变更将不被监听,默认只监听当前层级目录
        watchMonitor.setMaxDepth(3);
        //启动监听
        watchMonitor.start();

    }

}

// 文件修改了2个地方就直接打印了2次
image.png

0

评论区