• 技术文章 >Java >java教程

    Java如何使用WatchService监听文件变化的代码案例分享

    黄舟黄舟2017-10-16 09:55:12原创1385
    本篇文章主要介绍了Java利用WatchService监听文件变化示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    在实现配置中心的多种方案中,有基于JDK7+的WatchService方法,其在单机应用中还是挺有实践的意义的。

    代码如下:


    package com.longge.mytest;
    
    import java.io.IOException;
    import java.nio.file.FileSystems;
    import java.nio.file.Path;
    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;
    import java.util.List;
    
    /**
     * 测试JDK的WatchService监听文件变化
     * @author yangzhilong
     *
     */
    public class TestWatchService {
      public static void main(String[] args) throws IOException {
        // 需要监听的文件目录(只能监听目录)
        String path = "d:/test";
        
        WatchService watchService = FileSystems.getDefault().newWatchService();
        Path p = Paths.get(path);
        p.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY, 
            StandardWatchEventKinds.ENTRY_DELETE, 
            StandardWatchEventKinds.ENTRY_CREATE); 
        
        Thread thread = new Thread(() -> {
          try { 
            while(true){ 
              WatchKey watchKey = watchService.take(); 
              List<WatchEvent<?>> watchEvents = watchKey.pollEvents(); 
              for(WatchEvent<?> event : watchEvents){ 
                //TODO 根据事件类型采取不同的操作。。。。。。。 
                System.out.println("["+path+"/"+event.context()+"]文件发生了["+event.kind()+"]事件");  
              } 
              watchKey.reset(); 
            } 
          } catch (InterruptedException e) { 
            e.printStackTrace(); 
          }
        });
        thread.setDaemon(false);
        thread.start();
        
        // 增加jvm关闭的钩子来关闭监听
        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
          try {
            watchService.close();
          } catch (Exception e) {
          }
        }));
      }
    }

    运行示例结果类似如下:

    [d:/test/1.txt]文件发生了[ENTRY_MODIFY]事件
    [d:/test/1.txt]文件发生了[ENTRY_DELETE]事件
    [d:/test/新建文本文档.txt]文件发生了[ENTRY_CREATE]事件
    [d:/test/新建文本文档.txt]文件发生了[ENTRY_DELETE]事件
    [d:/test/222.txt]文件发生了[ENTRY_CREATE]事件

    php入门到就业线上直播课:查看学习

    以上就是Java如何使用WatchService监听文件变化的代码案例分享的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:WatchService Java 监听
    上一篇:Java实现多线程异常捕获Runnable的案例 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• Java数据结构之单链表与OJ题• 详细介绍Java正则表达式之单字符匹配和预定义字符• Java总结分享之反射、枚举、Lambda表达式• 一文搞懂Java线程池实现原理• 一起来分析java设计模式之单例
    1/1

    PHP中文网