hutool文件监听

简介: java工具学习

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

  • 支持多级目录的监听(WatchService只支持一级目录),可自定义监听目录深度
  • 延迟合并触发支持(文件变动时可能触发多次modify,支持在某个时间范围内的多次修改事件合并为一个修改事件)
  • 简洁易懂的API方法,一个方法即可搞定监听,无需理解复杂的监听注册机制。
  • 多观察者实现,可以根据业务实现多个Watcher来响应同一个事件(通过WatcherChain)


WatchMonitor提供的事件有:

  • ENTRY_MODIFY 文件修改的事件
  • ENTRY_CREATE 文件或目录创建的事件
  • ENTRY_DELETE 文件或目录删除的事件
  • OVERFLOW 丢失的事件

这些事件对应StandardWatchEventKinds中的事件。

importcn.hutool.core.io.FileUtil;
importcn.hutool.core.io.watch.WatchMonitor;
importcn.hutool.core.io.watch.Watcher;
importcn.hutool.core.lang.Console;
importjava.io.File;
importjava.nio.file.Path;
importjava.nio.file.WatchEvent;
publicclassTest {
publicstaticvoidmain(String[] args) {
Filefile=FileUtil.file("H:\\project\\hutool-stduy\\src\\main\\resources\\file1.txt");
//这里只监听文件或目录的修改事件WatchMonitorwatchMonitor=WatchMonitor.create(file, WatchMonitor.ENTRY_MODIFY);
watchMonitor.setWatcher(newWatcher() {
@OverridepublicvoidonCreate(WatchEvent<?>event, PathcurrentPath) {
Objectobj=event.context();
Console.log("创建:{}-> {}", currentPath, obj);
            }
@OverridepublicvoidonModify(WatchEvent<?>event, PathcurrentPath) {
Objectobj=event.context();
Console.log("修改:{}-> {}", currentPath, obj);
            }
@OverridepublicvoidonDelete(WatchEvent<?>event, PathcurrentPath) {
Objectobj=event.context();
Console.log("删除:{}-> {}", currentPath, obj);
            }
@OverridepublicvoidonOverflow(WatchEvent<?>event, PathcurrentPath) {
Objectobj=event.context();
Console.log("Overflow:{}-> {}", currentPath, obj);
            }
        });
watchMonitor.setMaxDepth(3);
watchMonitor.start();
    }
}

当修改文件的时候,监听器会输出:

修改:H:\project\hutool-stduy\src\main\resources->file1.txt


相关文章
|
监控 Java Linux
Hutool操作和监听文件
Hutool操作和监听文件
185 0
|
6月前
|
API
使用commons-io-2.0 API来实现监听文件变化
使用commons-io-2.0 API来实现监听文件变化
288 0
|
Java Linux Shell
java使用JSch连接服务器实现命令交互
这里通过jsch远程连接linux服务器,并在控制台实现命令的交互。
590 0
java使用JSch连接服务器实现命令交互
|
Java 数据安全/隐私保护
【Java用法】java使用javax.mail读取邮箱,SpringBoot javax.mail获取邮件内容,根据时间段筛选邮件,内附代码,拿来即用
【Java用法】java使用javax.mail读取邮箱,SpringBoot javax.mail获取邮件内容,根据时间段筛选邮件,内附代码,拿来即用
300 0
|
Java
mina-statemachine源码解析-目录
mina-statemachine源码解析-目录
76 0
|
Java Spring
Java:SpringBoot实现ApplicationEvent事件的监听和发布
Java:SpringBoot实现ApplicationEvent事件的监听和发布
137 0
|
Java 数据库
Java-SpringBoot-04-自定义监听器及事件
日常项目中,很多业务场景会用到监听器,比如在Service中处理业务时,我们需要记录一个操作的日志到数据库中,我们怎么实现呢?
414 0
Java-SpringBoot-04-自定义监听器及事件
|
Java Spring
Java-SpringBoot-03-Application事件和监听器
在ApplicationContext创建之前,侦听器怎么注册
125 0
Java-SpringBoot-03-Application事件和监听器
|
XML Java 数据格式
JAVA如何监听XML文件?并处理数据
本文主要的内容,就是讲述,第三方客户端,在指定的文件夹生成了对应的xml文件,java程序需要监听对应的文件夹,并解析xml文件内容,转成javaBean,主要使用到了xjc生成对应的实体类,在经过监听文件变化,加载xml数据,转换成对应的bean实例,采用的技术有Spring boot、XJC、commons-io
238 0
JAVA如何监听XML文件?并处理数据
|
XML 数据格式
hutool读取xml文件
hutool读取xml文件