`

Java7 使用WatchService监听文件变化

阅读更多

Watch service 用来观察被注册了的对象的变化和事件。例如,在文件系统监控某一个文件目录下文件资源的创建,修改,删除,这个是WatchService的一种实现方式,用来监听文件状态变化的。是WatchService和Watchable两个接口的配合使用,WatchService类似于在观察者模式中的观察者,Watchable类似域观察者模式中的被观察者。

 

实例如下:

@Test
    public void testResourceChanged() throws IOException, InterruptedException, ExecutionException {
        final String pathName = ResourceChangedTest.class.getResource("./").getPath();
        
        // 文件监控线程
        Executors.newCachedThreadPool().submit(new Runnable() {
            public void run() {
                try {
                    WatchService watchService = FileSystems.getDefault().newWatchService();
                    Path path = Paths.get(pathName);
                    // 注册监听器
                    path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE);
                    while (true) {
                        // 阻塞方式,消费文件更改事件
                        List<WatchEvent<?>> watchEvents = watchService.take().pollEvents();
                        for (WatchEvent<?> watchEvent : watchEvents) {
                            System.out.printf("[%s]文件发生了[%s]事件。%n", watchEvent.context(), watchEvent.kind());
                        }
                    }
                } catch(Exception e) {}
            }
        });
        
        Thread.sleep(1000);
        
        Path path2 = Paths.get(pathName + "test.xml");
        File file = path2.toFile();
        file.createNewFile();// 新建文件
        file.delete();// 删除文件
        
        Thread.sleep(1000);
    }
输出结果:
[test.xml]文件发生了[ENTRY_CREATE]事件。
[test.xml]文件发生了[ENTRY_DELETE]事件。

 

分享到:
评论
1 楼 cs6641468 2014-01-03  
WatchKey都没有reset,第二次loop妥妥的捕获不到的,少年

相关推荐

Global site tag (gtag.js) - Google Analytics