【JDK7】新特性(6) 监听文件系统的更改
为什么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) 监听文件系统的更改相关推荐
- 【JDK7】新特性(7) 监听文件系统的更改
2019独角兽企业重金招聘Python工程师标准>>> 有时需要递归遍历一个文件树,比如查找一个文件夹内符合条件的文件,查找某一天创建的文件--.jdk7 nio包提供一个新的接口 ...
- JDK7新特性详细说明及代码示例
在2011年7月28日,Oracle发布了JDK7的正式版.最近我从网上搜集了一些资料,把文字说明和代码示例结合起来,方便我们的学习. 下面我们来看看JDK7比6多了哪些新特性 1.访问文件系统 与之 ...
- jdk7新特性学习笔记
jdk7新特性学习笔记 从网络down了视频看,记录下学过的东西. 1.二进制字面量 JDK7开始,可以用二进制来表示整数(byte,short,int和long),语法:在二进制数值前面加 0b或者 ...
- 浮点数,字符串入门,基本数据类型自动转换,JDK7新特性, 变量.
8.1 浮点型 **√ **float**类型又被称作单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求. √ ****double表示这种类型的数值精度是floa ...
- JDK7新特性之try-with-resources
JDK7新特性之try-with-resources 本节内容并非JDK8的新特性,而是JDK7的新特性.此处讲解是因为多数人并不知道. 传统方式在资源关闭时,需要对每个需要关闭的资源进行 手动调用c ...
- JS window.open()打开新窗口、监听页面打开关闭状态(详细)
使用 window 对象的 open() 方法可以打开一个新窗口.用法如下: window.open (URL, name, features, replace) 参数列表如下: URL:可选字符串, ...
- JDK7新特性简单翻译介绍
« 家庭特点里程碑 · 建立 日历 » JDK 7中 特点 这是由甲骨文正在开发的功能,和其他列表中,JDK 7中. 这些功能将建议列入中的Java SE 7平台JSR ,除了为实现特定的上市的. 评 ...
- JDK7新特性_JDK7的六个新特性
二进制字面量JDK7开始,终于可以用二进制来表示整数(byte,short,int和long).使用二进制字面量的好处是,可以使代码更容易被理解.语法非常简单,只要在二进制数值前面加 0b或者0B举例 ...
- 【JDK7】新特性(4) NIO2.0 文件系统
2019独角兽企业重金招聘Python工程师标准>>> java.io.File 不够完美吧.Jdk7提供了一套新的文件系统,会让你满意的. 先来聊聊java.io.File的七宗罪 ...
最新文章
- 三维感知,这些干货足够了!(自动驾驶/三维重建/SLAM/点云/标定/深度估计/3D检测)...
- 【转】第一类Stirling数和第二类Stirling
- 蓝桥杯_算法训练_矩阵乘法
- oracle修改某个表的字段顺序
- boost::compose_property_map相关的测试程序
- Alias Method解决随机类型概率问题(别名算法)
- 设置 shell 脚本中 echo 显示内容带颜色
- mysql normsinv_在MySQL中实现NORMSINV函数
- mysql连接池 golang_Golang 你一定要懂的连接池
- githug-54-git练习
- tensorflow api训练3(ckpt转成pb和pbtxt)完结
- python---字符串的拼接、去重、反转、字母花样排序、单词出现判断、统计文件特定单词频率lambda、硬盘容量、列表转字符串
- UESTC 1633 去年春恨却来时,落花人独立,微雨燕双飞 Dijkstra+构造
- 设置Centos7时区
- Linux系统chmod命令读、写、执行
- SpringBoot中报错expected at least 1 bean which qualifies as autowire candidate. Dependency annotations:
- Redis热搜关键词加载,建议收藏
- 听《武志红的心理课之潜意识就是命运》有感 命运,这个东西信者有,不信者无。我很赞同武老师的观点,一个热的外在命运和我们的内在想象,是镜像关系。这不禁让我想起了小时候的一个故事:一群青蛙比赛爬山,很多人
- Cisco(53)——STP理论
- EXCEL 自动出 年月日和星期
热门文章
- 2013年网站内容建设新趋势
- 剑桥标准英语教程听力资源1-4级
- 哪些情况可以判定需要进行仪器校准?
- 热式气体质量流量计检定规程_最佳实践:热式质量流量计实际标定的安全性和准确性...
- ESP32 LVGL8.1 ——Style local style 样式当地的风格 (Style 11)
- ACM-ICPC模板整理
- 微营销软件需要的计算机技术,WeTool 一款专用于个人微信营销操作及运营的电脑工具...
- 简单常用JS函数集合大全107个
- SAP在华真相:天价收费与用户之灾
- 《ASP.NET程序设计教程》目录