java watchservice 原理,NIO 之 WatchService

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 实例,该实例对应

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值