Java 文件监控WatchMonitor

文章介绍了在JDK7之前对文件和目录监控的低效方法,并提出JDK7引入的WatchService。然而,由于WatchService的API不够友好,Hutool库提供了一个封装版的WatchMonitor,简化了文件系统事件监听,支持延迟监听和自定义事件处理。示例代码展示了如何使用Hutool的WatchMonitor来监控文件和目录的创建、修改和删除事件,并设置最大监听目录深度。
摘要由CSDN通过智能技术生成

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

Maven导入:

   <dependency>
      <groupId>cn.hutool</groupId>
      <artifactId>hutool-all</artifactId>
      <version>5.8.9</version>
    </dependency>

代码:

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.watch.WatchMonitor;
import cn.hutool.core.io.watch.Watcher;
import cn.hutool.core.io.watch.watchers.DelayWatcher;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.nio.file.Path;
import java.nio.file.WatchEvent;

@Component
@Slf4j
public class TestController {

    @Value("${dvp.path.asset2d}")
    private String assetPath;

    @PostConstruct
    private void watchMonitorFile(){
        //这里监听文件或目录的修改删除新增及丢失事件
        WatchMonitor watchMonitor = WatchMonitor
                .createAll(FileUtil.file(assetPath), new DelayWatcher(new Watcher() {
                    @Override
                    public void onCreate(WatchEvent<?> event, Path currentPath) {
                        Object obj = event.context();

                        log.info("2D创建:{}-> {}", currentPath, JSON.toJSONString(obj));
                    }

                    @Override
                    public void onModify(WatchEvent<?> event, Path currentPath) {
                        Object obj = event.context();
                        log.info("2D修改:getFileName{} {}-> {}",currentPath.getFileName(), currentPath, JSON.toJSONString(obj));
                    }

                    @Override
                    public void onDelete(WatchEvent<?> event, Path currentPath) {
                        Object obj = event.context();
                        log.info("2D删除:{}-> {}", currentPath, JSON.toJSONString(obj));
                    }

                    @Override
                    public void onOverflow(WatchEvent<?> event, Path currentPath) {
                        Object obj = event.context();
                        log.info("2DOverflow:{}-> {}", currentPath, JSON.toJSONString(obj));
                    }
                }, 500));
        //设置监听目录的最大深入,目录层级大于制定层级的变更将不被监听,默认只监听当前层级目录
        watchMonitor.setMaxDepth(4);
        //启动监听
        watchMonitor.start();

    }

}

当涉及到二层文件夹目录的时候,需要主要把目录放入到文件监听进去

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值