Get新技能,Java实现文件监控
文件监控
作者: 八阿哥的剑
!!! 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}
28Common 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