WatchService监控文件变化
2017-05-22 21:02
309 查看
概述
Java 7 对原有的NIO进行了重大的改进,新增了Path接口(和平台无关的路径),还有Paths,Files两个工具类。好了进入正题WatchService,在前面的Java版本中,如果想监控某个文件的变化,需要启动一个后台进程,每隔一段时间去遍历指定的目录,如果结果和上次的不同则认为发生了变化。而WatchService在这方面有更好的性能,但是需要结合Path类的register方法来使用。register方法的第一个参数需要制定一个WatchService来进行监听,后面为可选参数,指定的是需要监听哪些事件。代码实现
import java.io.IOException; import java.nio.file.FileSystems; import java.nio.file.Paths; import java.nio.file.StandardWatchEventKinds; import java.nio.file.WatchEvent; import java.nio.file.WatchKey; import java.nio.file.WatchService; public class WatchServiceTest { public static void main(String[] args) throws InterruptedException { try { //得到一个实例 WatchService watcher = FileSystems.getDefault().newWatchService(); //结合Path的register方法来监控目录 C:\Users\Administrator\Desktop\123456\ Paths.get("C:\\Users\\Administrator\\Desktop", "123456") .register(watcher, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY); while(true){ WatchKey key = watcher.take(); for(WatchEvent<?> event : key.pollEvents()){ String ev = event.context()+""; if("ENTRY_CREATE".equals(event.kind())) System.out.println(ev+ " 文件 " + "创建了"); else if("ENTRY_MODIFY".equals(event.kind()+"")) System.out.println(ev+ " 文件--"+ "被修改了"); else if("ENTRY_DELETE".equals(event.kind()+"")) System.out.println(ev+ " 文件 " + "被删除了"); } //重设WatchKey boolean vaild = key.reset(); if(!vaild) break; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
总结
虽然可以简单实现了文件的监控,但需要注意,如果修改文件名,会先触发delete事件,再触发modify事件;如果在该目录下有其他文件夹,在子文件夹中发生的一切事件都被认为是被监控的目录下的modify事件。相关文章推荐
- Java使用WatchService监控文件内容变化的示例
- 通过inotify监控linux文件系统变化
- android SD卡文件变化监控
- java监控文件夹内文件变化并且进行文件同步bigfilesync
- python 监控文件变化
- 工具类commons-io的Tailer用法,用来监控文件内容的变化情况
- C#监控文件变化
- 一个监控LINUX目录和文件变化的Shell脚本分享
- Java 如何监控文件目录的变化 【转】
- 使用apache common-io 监控文件变化
- 利用Inotify监控文件变化
- Java监控文件变化
- 监控文件变化的三种方法
- visual studio extension: 怎样监控文件的变化
- C#实现实时监控文件目录下的变化
- java 实现监控某目录文件变化
- C#监控本地目录文件变化
- inotify机制简介(用于监控文件系统中文件及文件夹变化)
- [SHELL]监控LINUX目录文件变化
- linux下使用inotify监控文件变化