WatchService类监控案例

前言

该类位于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的可变参数,参数中有三个点

参考文献:

使用WatchService类做文件监控总结

利用WatchService实现文件监视

JAVA的可变参数,参数中有三个点

posted @ 2021-08-28 10:28  前方一片光明  阅读(155)  评论(0编辑  收藏  举报