NIO 之 WatchService
Java 1.6版本以前是不存在目录监控的API的。如果要实现这种功能必须要自己遍历目录,记录各个文件的情况,然后定时全部遍历一次,从 JDK7 之后出现了 WatchService 类,实现了对目录下文件的监控。
整体流程
整个监控目录文件操作的流程大致如下:
获取 WatchService
注册指定目录的监视器 WatchService
等待目录下的文件发生变化
对发生变化的文件进行操作
获取 WatchService 实例
WatchService 类的实现实际上是对操作系统的文件监视器的封装,相比之前的手动实现,优雅了不少。因为不需要遍历文件整体而言效率也高很多。以下为获取 WatchService 实例的代码,通过 FileSystem.getDefault() 可看出并非是自己实现的。从 newWatchService() 方法名看, WatchService 可以获取多个。
WatchService watchService = FileSystems.getDefault().newWatchService();
实际上调用此方法后,程序会新开一个线程,监视文件变化发出的信号,此时线程尚未就绪。
为目录注册监视器
有了监视器,接下来我们需要注册监视器了。
Path path = Paths.get("src");
WatchKey watchKey = path.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY);
注册监视器需要用到 Path 实例,该实例对应