项目概况

Get新技能,Java实现文件监控

2026-01-292 min read后端技术
文件监控

作者: 八阿哥的剑

博客: https://springlearn.cn

!!! tip 一日一句毒鸡汤 问世间钱为何物,只叫人生死相许。!😄 !!!

Java原生版本监控

java
1public class JavaWatchAPI { 2 3 public static void main(String[] args) throws Exception { 4 //第一步:取得WatchService 5 WatchService watchService = FileSystems.getDefault().newWatchService(); 6//第二步:确定要监控的路径 7 Path path = Paths.get("/Users/liuxin/Github/nobug-learn-project/nobug-learn-01/src/main/java"); 8 9//第三步:为本路径绑定WatchService,并确定监控的事件 10 path.register( 11 watchService, 12 // StandardWatchEventKinds.ENTRY_CREATE—当有新文件时触发。可能是创建了一个新文件 13 StandardWatchEventKinds.ENTRY_CREATE, 14 // StandardWatchEventKinds.ENTRY_DELETE—当文件被删除、移动或重命名时触发 15 StandardWatchEventKinds.ENTRY_DELETE, 16 // StandardWatchEventKinds.ENTRY_MODIFY—当文件被修改时触发。 17 StandardWatchEventKinds.ENTRY_MODIFY); 18// StandardWatchEventKinds.OVERFLOW—触发表示丢失或丢弃的事件。 19 WatchKey key = null; 20while ((key = watchService.take()) != null) { 21 for (WatchEvent<?> event : key.pollEvents()) { 22 System.out.println("事件" + event.kind() + "发生了,文件是:" + event.context()); 23} 24 key.reset(); 25} 26 } 27} 28

Common IO 工具包监控

java
1package cn.github.chinesszz; 2 3import org.apache.commons.io.filefilter.FileFilterUtils; 4import org.apache.commons.io.monitor.FileAlterationListener; 5import org.apache.commons.io.monitor.FileAlterationMonitor; 6import org.apache.commons.io.monitor.FileAlterationObserver; 7import org.junit.Test; 8 9import java.io.File; 10import java.util.concurrent.TimeUnit; 11 12/** 13 * @author liuxin 14 * 2021/11/9 8:55 下午 15 */ 16public class CommonIOAPI { 17 18 public static void main(String[] args) throws Exception { 19 File directory = new File("/Users/liuxin/Github/nobug-learn-project/nobug-learn-01/src/main/java"); 20// 轮询间隔 5 秒 21 long interval = TimeUnit.SECONDS.toMillis(5); 22// 创建一个文件观察器用于处理文件的格式 23 FileAlterationObserver observer = new FileAlterationObserver(directory, FileFilterUtils.and( 24 FileFilterUtils.fileFileFilter(), FileFilterUtils.suffixFileFilter(".txt"), 25 FileFilterUtils.prefixFileFilter("lx"))); 26// 设置文件变化监听器 27 observer.addListener(new MyFileListener()); 28FileAlterationMonitor monitor = new FileAlterationMonitor(interval, observer); 29monitor.start(); 30System.out.println(1); 31} 32 33 @Test 34 public void watchDir() throws Exception { 35 File directory = new File("/Users/liuxin/Github/nobug-learn-project/nobug-learn-01/src/main/java"); 36FileAlterationObserver fileAlterationObserver = new FileAlterationObserver(directory, FileFilterUtils.and( 37 FileFilterUtils.directoryFileFilter())); 38long interval = TimeUnit.SECONDS.toMillis(5); 39// 设置文件变化监听器 40 fileAlterationObserver.addListener(new MyFileListener()); 41FileAlterationMonitor monitor = new FileAlterationMonitor(interval, fileAlterationObserver); 42monitor.start(); 43while (true); 44} 45 46 static final class MyFileListener implements FileAlterationListener { 47 @Override 48 public void onStart(FileAlterationObserver fileAlterationObserver) { 49 System.out.println("monitor start scan files.."); 50} 51 52 53 @Override 54 public void onDirectoryCreate(File file) { 55 System.out.println(file.getName() + " director created."); 56} 57 58 59 @Override 60 public void onDirectoryChange(File file) { 61 System.out.println(file.getName() + " director changed."); 62} 63 64 65 @Override 66 public void onDirectoryDelete(File file) { 67 System.out.println(file.getName() + " director deleted."); 68} 69 70 71 @Override 72 public void onFileCreate(File file) { 73 System.out.println(file.getName() + " created."); 74} 75 76 77 @Override 78 public void onFileChange(File file) { 79 System.out.println(file.getName() + " changed."); 80} 81 82 83 @Override 84 public void onFileDelete(File file) { 85 System.out.println(file.getName() + " deleted."); 86} 87 88 89 @Override 90 public void onStop(FileAlterationObserver fileAlterationObserver) { 91 System.out.println("monitor stop scanning.."); 92} 93 } 94} 95 96