借助JDK7中WatchService实现文件变更监听

Posted niugang0920

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了借助JDK7中WatchService实现文件变更监听相关的知识,希望对你有一定的参考价值。

import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.support.PropertiesLoaderUtils;
import java.io.IOException;
import java.nio.file.*;
import java.util.Objects;
import java.util.Properties;


/**
 * @author Created by niugang on 2019/10/16/19:41
 */
@SuppressWarnings("InfiniteLoopStatement")
public class WatchServiceDemo {
    private static String fileName="mail.properties";
    private static FileSystemResource classPathResource = null;
    private static WatchService watchService = null;

    public static Properties properties;


    static {

        String filePath = "D:/home/conf/mail.properties";
        //从文件系统加载文件
        classPathResource = new FileSystemResource(filePath);
        //监听filenam所在的目录下的文件修改、删除事件
        try {
            watchService = FileSystems.getDefault().newWatchService();
            Paths.get(classPathResource.getFile().getParent()).register(watchService,
                    StandardWatchEventKinds.ENTRY_MODIFY,
                    StandardWatchEventKinds.ENTRY_DELETE
            );
            properties = PropertiesLoaderUtils.loadProperties(classPathResource);
        } catch (IOException e) {
            e.printStackTrace();
        }


        Thread watchThread = new Thread() {
            @Override
            public void run() {

                while (true) {
                    WatchKey watchKey = null;
                    try {
                        watchKey = watchService.take();
                        for (WatchEvent<?> event : watchKey.pollEvents()) {
                            if (Objects.equals(event.context().toString(), fileName)) {
                                properties = PropertiesLoaderUtils.loadProperties(classPathResource);
                                break;
                            }
                        }
                        watchKey.reset();
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        if (watchKey != null) {
                            watchKey.reset();
                        }
                    }


                }
            }
        };
        //设置为守护线程
        watchThread.setDaemon(true);
        watchThread.start();

       //JVM停止时 关闭
        Runtime.getRuntime().addShutdownHook(new Thread(){
            @Override
            public void run() {
                try {
                    watchService.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
    }

//
//    public static void main(String[] args) throws InterruptedException {
//        //验证  启动main方法   修改mail.properties文件 看控制台输出内容的变化
//        while (true){
//            System.out.println(properties);
//            Thread.sleep(5000);
//        }
//
//
//
//    }

}

微信公众号

技术图片
JAVA程序猿成长之路
分享资源,记录程序猿成长点滴。专注于Java,Spring,SpringBoot,SpringCloud,分布式,微服务。

以上是关于借助JDK7中WatchService实现文件变更监听的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mac OSX 上使用 JDK 7?

Java WatchService 在观看映射驱动器时不生成事件

Java 文件系统监控(WatchService)

Java 项目中一种简单的动态修改配置即时生效的方式 WatchService

java如何实现linux下实时监控文件是不是有变化

java利用WatchService实时监控某个目录下的文件变化并按行解析(注:附源代码)