Java监视文件变化

本文最后更新于:2021年12月13日 下午

Java利用Nio监视文件变化

1、先上代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import java.util.List;

public class FileWatcherTest {

public static void main(String[] args) throws Exception {

// 文件变化Service
WatchService watchService = FileSystems.getDefault().newWatchService();

// 注册一个D盘根目录的变化
Path path = Paths.get("D:/");

// 监听增删改的变化
path.register(watchService,
StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_MODIFY,
StandardWatchEventKinds.ENTRY_DELETE);

// 获取目标Key
WatchKey watchKey = watchService.take();
while (true) {
// 循环获取事件 查看是否存在变化
List<WatchEvent<?>> pollEvents = watchKey.pollEvents();

if (null != pollEvents && !pollEvents.isEmpty()) {

for (WatchEvent<?> event: pollEvents) {
System.out.println("kind = " + event.kind() + ", context = " + event.context());
}
}
}
}
}

2、原理分析

······ 当然是略过啦

3、缺陷

path一次只能register一个目录, 并且不会针对子目录进行监控
也就是说若想存在多个目录, 只能一个一个的去注册, 比较繁琐