使用WatchService监听文件变化.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
使用WatchService监听文件变化 要使用WatchService,首先必需创建一个实例,使用?java.nio.file.FileSystems?类: WatchService watchService = FileSystems.getDefault().newWatchService(); 接下来,我们初始化一个被监控文件夹的Path类: Path path = Paths.get(pathToDir); 然后,将这个Path注册到?WatchService?中去: WatchKey watchKey = path.register( ?watchService, StandardWatchEventKinds...); 留意,注册方法其次个参数是一个可变长参数,也就是可以注册多个大事类型。 StandardWatchEventKinds?有如下四品种型: ENTRY_CREATE 创建大事,可是新建一个文件或重命名文件 ENTRY_MODIFY 修改大事,文件内容被修改,有些系统上面文件属性被修改也会触发 ENTRY_DELETE 删除大事,文件被删除或被重命名 OVERFLOW 假如丢失或放弃大事时被触发,我们一般不会关注这个类型 WatchKey WatchKey?类代表了这个监听服务的注册,可以用它来猎取大事的各个属性。一般来讲我们会通过如下方法猎取这个类实例: WatchKey watchKey = watchService.take(); 这个方法会一直堵塞,晓得某个大事到来。 有一点格外重要的需要记住,一旦?WatchKey?实例通过poll或take前往后,它再也不会捕获任何大事,触发你调用reset方法: watchKey.reset(); 这样的话就能将这个?WatchKey?又放回到watch service队列中去,可以重新等待新的大事了。 所以一般来讲这个服务代码方式会写成如下方式: atchKey key; while ((key = watchService.take()) != null) { ? ?for (WatchEvent event : key.pollEvents()) { ? ? ? ?//process ? ?} ? ?key.reset(); } 解释一下运转过程,take()方法会一直堵塞直到前往一个WatchKey实例,然后进入循环内部,pollEvents()方法会前往当前Key上面全部大事列表,我们一个个去处理这些大事。 全部大事处理完成后,必需调用reset方法,让这个key重新进入监听队列。 一个完整例子 下面通过一个完整例子演示WatchService的用法,我们监听用户家名目的文件变动,打印相应的信息。 public class DirectoryWatcherExample { ? ?public static void main(String[] args) { ? ? ? ?WatchService watchService ? ? ? ? ?= FileSystems.getDefault().newWatchService(); ? ? ? ?Path path = Paths.get(System.getProperty(user.home)); ? ? ? ?path.register( ? ? ? ? ?watchService, ? ? ? ? ? ?StandardWatchEventKinds.ENTRY_CREATE, ? ? ? ? ? ? ?StandardWatchEventKinds.ENTRY_DELETE, ? ? ? ? ? ? ? ?StandardWatchEventKinds.ENTRY_MODIFY); ? ? ? ?WatchKey key; ? ? ? ?while ((key = watchService.take()) != null) { ? ? ? ? ? ?for (WatchEvent event : key.pollEvents()) { ? ? ? ? ? ? ? ?System.out.println( ? ? ? ? ? ? ? ? ?Event kind: + event.kind() ? ? ? ? ? ? ? ? ? ?+ . File affected: + event.context() + .); ? ? ? ? ? ?} ? ? ? ? ? ?key.reset(); ? ? ? ?} ? ?} } 测试一下,在用户名目新建一个文件,然后重命名为?www.txt?,看看输出结果: Event k

文档评论(0)

bob157641554 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档