- 引入maven依赖
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.17.0</version>
</dependency>
- 编写demo程序
package com.demo.fileListener;import jakarta.annotation.PostConstruct;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;import java.io.File;@Component
public class DirObserverTest {Logger log = LoggerFactory.getLogger(this.getClass());@PostConstructpublic void init() throws Exception {// 观察指定目录:F:\dirObserverTest下的,以.json和.txt结尾的文件变动。FileAlterationObserver observer = new FileAlterationObserver("F:\\dirObserverTest", pathname -> pathname.getName().endsWith(".json") || pathname.getName().endsWith(".txt"));DirListener listener = new DirListener();observer.addListener(listener);FileAlterationMonitor monitor = new FileAlterationMonitor();monitor.addObserver(observer);monitor.start();log.info("目录监听已启动................");}}/*** 自定义监听器*/
class DirListener extends FileAlterationListenerAdaptor {Logger log = LoggerFactory.getLogger(this.getClass());@Overridepublic void onFileCreate(File file) {log.info("文件被创建:{}", file.getAbsoluteFile());super.onFileCreate(file);}@Overridepublic void onFileChange(File file) {log.info("文件变化:{}", file.getAbsoluteFile());super.onFileChange(file);}@Overridepublic void onFileDelete(File file) {log.info("文件被删除:{}", file.getAbsoluteFile());super.onFileDelete(file);}@Overridepublic void onDirectoryChange(File directory) {log.info("目录变化:{}", directory.getAbsoluteFile());super.onDirectoryChange(directory);}@Overridepublic void onDirectoryCreate(File directory) {log.info("目录新增:{}", directory.getAbsoluteFile());super.onDirectoryCreate(directory);}@Overridepublic void onDirectoryDelete(File directory) {log.info("目录删除:{}", directory.getAbsoluteFile());super.onDirectoryDelete(directory);}@Overridepublic void onStart(FileAlterationObserver observer) {// 周期(默认10s一次)性检测-开始log.info("onStart:{}", observer.getDirectory().getAbsoluteFile());super.onStart(observer);}@Overridepublic void onStop(FileAlterationObserver observer) {// 周期(默认10s一次)性检测-结束log.info("onStop:{}", observer.getDirectory().getAbsoluteFile());super.onStop(observer);}
}
- 测试
启动程序后,在对应目录下创建、修改、删除以.json、.txt为后缀的文件,都将看到控制台输出对应事件的日志。