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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值