为什么80%的码农都做不了架构师?>>>

我们用IDE(例如Eclipse)编程,外部更改了代码文件,IDE马上提升“文件有更改”。Jdk7的NIO2.0也提供了这个功能,用于监听文件系统的更改。它采用类似观察者的模式,注册相关的文件更改事件(新建,删除……),当事件发生的,通知相关的监听者。
    java.nio.file.*包提供了一个文件更改通知API,叫做Watch Service API.

实现流程如下
        1.为文件系统创建一个WatchService 实例 watcher
        2.为你想监听的目录注册 watcher。注册时,要注明监听那些事件。
        3.在无限循环里面等待事件的触发。当一个事件发生时,key发出信号,并且加入到watcher的queue
        4.从watcher的queue查找到key,你可以从中获取到文件名等相关信息
        5.遍历key的各种事件
        6.重置 key,重新等待事件
        7.关闭服务
    Java代码:

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import static java.nio.file.StandardWatchEventKind.*;  /** * @author kencs@foxmail.com */
public class TestWatcherService {  private WatchService watcher;  public TestWatcherService(Path path)throws IOException{  watcher = FileSystems.getDefault().newWatchService();  path.register(watcher, ENTRY_CREATE,ENTRY_DELETE,ENTRY_MODIFY);  }  public void handleEvents() throws InterruptedException{  while(true){  WatchKey key = watcher.take();  for(WatchEvent<?> event : key.pollEvents()){  WatchEvent.Kind kind = event.kind();  if(kind == OVERFLOW){//事件可能lost or discarded  continue;  }  WatchEvent<Path> e = (WatchEvent<Path>)event;  Path fileName = e.context();  System.out.printf("Event %s has happened,which fileName is %s%n"  ,kind.name(),fileName);  }  if(!key.reset()){  break;  }  }  }  public static void main(String args[]) throws IOException, InterruptedException{  if(args.length!=1){  System.out.println("请设置要监听的文件目录作为参数");  System.exit(-1);  }  new TestWatcherService(Paths.get(args[0])).handleEvents();  }
}

接下来,见证奇迹的时刻

1.随便新建一个文件夹 例如 c:\\test
    2.运行程序 java TestWatcherService c:\\test
    3.在该文件夹下新建一个文件本件 “新建文本文档.txt”
    4.将上述文件改名为 “abc.txt”
    5.打开文件,输入点什么吧,再保存。
    6.Over!看看命令行输出的信息吧

命令行信息代码
    1.Event ENTRY_CREATE has happened,which fileName is 新建文本文档.txt 
    2.Event ENTRY_DELETE has happened,which fileName is 新建文本文档.txt 
    3.Event ENTRY_CREATE has happened,which fileName is abc.txt 
    4.Event ENTRY_MODIFY has happened,which fileName is abc.txt 
    5.Event ENTRY_MODIFY has happened,which fileName is abc.txt

【JDK7】新特性(1)概述:http://my.oschina.net/zhengjian/blog/94467
【JDK7】新特性(2)语法:http://my.oschina.net/zhengjian/blog/94473
【JDK7】新特性(3)JDBC4.1:http://my.oschina.net/zhengjian/blog/95070
【JDK7】新特性(4)NIO2.0 文件系统:http://my.oschina.net/zhengjian/blog/95071
【JDK7】新特性(5)fork/join 框架:http://my.oschina.net/zhengjian/blog/95072
【JDK7】新特性(6)监听文件系统的更改:http://my.oschina.net/zhengjian/blog/95077
【JDK7】新特性(7)监听文件系统的更改:http://my.oschina.net/zhengjian/blog/95078
【JDK7】新特性(8)异步io/AIO:http://my.oschina.net/zhengjian/blog/95081

原文地址: http://janeky.iteye.com/blog/1049328

转载于:https://my.oschina.net/zhengjian/blog/95077

【JDK7】新特性(6) 监听文件系统的更改相关推荐

  1. 【JDK7】新特性(7) 监听文件系统的更改

    2019独角兽企业重金招聘Python工程师标准>>> 有时需要递归遍历一个文件树,比如查找一个文件夹内符合条件的文件,查找某一天创建的文件--.jdk7 nio包提供一个新的接口 ...

  2. JDK7新特性详细说明及代码示例

    在2011年7月28日,Oracle发布了JDK7的正式版.最近我从网上搜集了一些资料,把文字说明和代码示例结合起来,方便我们的学习. 下面我们来看看JDK7比6多了哪些新特性 1.访问文件系统 与之 ...

  3. jdk7新特性学习笔记

    jdk7新特性学习笔记 从网络down了视频看,记录下学过的东西. 1.二进制字面量 JDK7开始,可以用二进制来表示整数(byte,short,int和long),语法:在二进制数值前面加 0b或者 ...

  4. 浮点数,字符串入门,基本数据类型自动转换,JDK7新特性, 变量.

    8.1 浮点型 **√ **float**类型又被称作单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求. √ ****double表示这种类型的数值精度是floa ...

  5. JDK7新特性之try-with-resources

    JDK7新特性之try-with-resources 本节内容并非JDK8的新特性,而是JDK7的新特性.此处讲解是因为多数人并不知道. 传统方式在资源关闭时,需要对每个需要关闭的资源进行 手动调用c ...

  6. JS window.open()打开新窗口、监听页面打开关闭状态(详细)

    使用 window 对象的 open() 方法可以打开一个新窗口.用法如下: window.open (URL, name, features, replace) 参数列表如下: URL:可选字符串, ...

  7. JDK7新特性简单翻译介绍

    « 家庭特点里程碑 · 建立 日历 » JDK 7中 特点 这是由甲骨文正在开发的功能,和其他列表中,JDK 7中. 这些功能将建议列入中的Java SE 7平台JSR ,除了为实现特定的上市的. 评 ...

  8. JDK7新特性_JDK7的六个新特性

    二进制字面量JDK7开始,终于可以用二进制来表示整数(byte,short,int和long).使用二进制字面量的好处是,可以使代码更容易被理解.语法非常简单,只要在二进制数值前面加 0b或者0B举例 ...

  9. 【JDK7】新特性(4) NIO2.0 文件系统

    2019独角兽企业重金招聘Python工程师标准>>> java.io.File 不够完美吧.Jdk7提供了一套新的文件系统,会让你满意的. 先来聊聊java.io.File的七宗罪 ...

最新文章

  1. 三维感知,这些干货足够了!(自动驾驶/三维重建/SLAM/点云/标定/深度估计/3D检测)...
  2. 【转】第一类Stirling数和第二类Stirling
  3. 蓝桥杯_算法训练_矩阵乘法
  4. oracle修改某个表的字段顺序
  5. boost::compose_property_map相关的测试程序
  6. Alias Method解决随机类型概率问题(别名算法)
  7. 设置 shell 脚本中 echo 显示内容带颜色
  8. mysql normsinv_在MySQL中实现NORMSINV函数
  9. mysql连接池 golang_Golang 你一定要懂的连接池
  10. githug-54-git练习
  11. tensorflow api训练3(ckpt转成pb和pbtxt)完结
  12. python---字符串的拼接、去重、反转、字母花样排序、单词出现判断、统计文件特定单词频率lambda、硬盘容量、列表转字符串
  13. UESTC 1633 去年春恨却来时,落花人独立,微雨燕双飞 Dijkstra+构造
  14. 设置Centos7时区
  15. Linux系统chmod命令读、写、执行
  16. SpringBoot中报错expected at least 1 bean which qualifies as autowire candidate. Dependency annotations:
  17. Redis热搜关键词加载,建议收藏
  18. 听《武志红的心理课之潜意识就是命运》有感 命运,这个东西信者有,不信者无。我很赞同武老师的观点,一个热的外在命运和我们的内在想象,是镜像关系。这不禁让我想起了小时候的一个故事:一群青蛙比赛爬山,很多人
  19. Cisco(53)——STP理论
  20. EXCEL 自动出 年月日和星期

热门文章

  1. 2013年网站内容建设新趋势
  2. 剑桥标准英语教程听力资源1-4级
  3. 哪些情况可以判定需要进行仪器校准?
  4. 热式气体质量流量计检定规程_最佳实践:热式质量流量计实际标定的安全性和准确性...
  5. ESP32 LVGL8.1 ——Style local style 样式当地的风格 (Style 11)
  6. ACM-ICPC模板整理
  7. 微营销软件需要的计算机技术,WeTool 一款专用于个人微信营销操作及运营的电脑工具...
  8. 简单常用JS函数集合大全107个
  9. SAP在华真相:天价收费与用户之灾
  10. 《ASP.NET程序设计教程》目录