前言
该类位于java.nio.file包下
最近项目用到了WatchService类(用于监听文件变化),记录一下要点与心得,方便以后查看
监控案例
下面提供的代码是一个监控D盘test文件夹下面的文件变化的案例,包括新增、修改、删除文件
public class TestWatchService {
public static void main(String[] args) throws IOException {
//需要监视的文件目录(注意:只能监听目录)
String path = "d:/test";
Path p = Paths.get(path);
//创建监视服务类
WatchService watchService = FileSystems.getDefault().newWatchService();
//注册监控服务,监控新增、修改、删除事件,也可以只监控一个事件
p.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_DELETE,
StandardWatchEventKinds.ENTRY_CREATE);
Thread thread = new Thread(() -> {
try {
while (true) {
WatchKey watchKey = watchService.take();
List<WatchEvent<?>> watchEvents = watchKey.pollEvents();
for (WatchEvent<?> event : watchEvents) {
//对文件夹中的文件有操作,就会打印下列语句
System.out.println(event.kind() + "事件:" + path + "/" + event.context());
}
watchKey.reset();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
});
thread.setDaemon(false);
thread.start();
new File("d:/test/a.txt").createNewFile();
new File("d:/test/a.txt").delete();
new File("d:/test/test2").mkdir();
new File("d:/test/test2/123.txt").createNewFile();
}
}
注意:只能监听test文件夹下面的文件或者文件夹的变化,更深一层的变化不会被监听。
1.在test中的a.txt中修改内容的话,可以被监听到
2.在test2中添加、删除文件,可以被监听到
3.在test2中的123.txt里面修改内容的话,不能被监听到
扩展
Path的register方法中的参数是一个可变参数(三个点),算是java语法糖的一种
具体使用方式参考:JAVA的可变参数,参数中有三个点
参考文献:
扫描二维码关注公众号,回复:
11142809 查看本文章