前言
该类位于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的可变参数,参数中有三个点
参考文献: