WatchService监控文件变化

来源:互联网 发布:淘宝海外物流怎么发货 编辑:程序博客网 时间:2024/05/17 07:58

概述

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事件。

原创粉丝点击