JAVA监控文件夹、文件内容变更(新增、修改、删除)

通过java后台实现监控特定路径下的文件夹、文件内容是否发生变动!

实时监控文件变化有很多种方式,本文主要讲的是通过commons.io.jar,感觉很好用,很容易!

上面直接上案例:

第一步:maven引入:

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>

第二步:开启监控

package cn.**.**.**.plugs.file;

import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.concurrent.TimeUnit;

/**
 * @author <a href="mailto:Tastill@**.cn">Tastill</a>
 * @version 2019/1/24 15:00
 * @description FileMonitorTest
 */
@Component
public class FileMonitor {
    /**
      * @description
      * @param
      * @return
      * @version 2.0, 2019/1/25 9:44
      * @author <a href="mailto:Tastill@**.cn">Tastill</a>
      */
    @PostConstruct
    public void initFileMonitor() {
        // 监控目录
        String rootDir = "D:\\Test";
        // 轮询间隔 5 秒
        Integer time = 10;
        long interval = TimeUnit.SECONDS.toMillis(time);
        // 创建一个文件观察器用于处理文件的格式,
        //                        FileFilterUtils.suffixFileFilter(".txt")
        FileAlterationObserver _observer = new FileAlterationObserver(
                rootDir,
                FileFilterUtils.and(
                        FileFilterUtils.fileFileFilter()),  //过滤文件格式
                null);
        FileAlterationObserver observer = new FileAlterationObserver(rootDir);

        observer.addListener(new FileListener()); //设置文件变化监听器
        //创建文件变化监听器
        FileAlterationMonitor monitor = new FileAlterationMonitor(interval, observer);
        // 开始监控
        try {
            monitor.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这里使用@PostConstruct注解,主要是为了项目启动时,执行一次该方法,省去了通过定时器来调起定时器!

第三步:继承FileAlterationListenerAdaptor.java类,重写文件变更时的实现业务逻辑处理

package cn.**.**.**.plugs.file;

import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.springframework.beans.factory.annotation.Autowired;

import java.io.File;
import java.util.Properties;
import org.apache.log4j.Logger;

/**
 * @author <a href="Tastill@**.cn">Tastill</a>
 * @version 2019/1/24 14:55
 * @description FileListener
 */
public class FileListener extends FileAlterationListenerAdaptor {
    public static final Logger logger = Logger.getLogger(FileListener.class);
    @Autowired
    FileConfigLoader fileConfigLoader;
    /**
      * @description 启动监听
      * @param
      * @return
      * @version 2.0, 2019/1/24 15:08
      * @author <a href="Tastill@**.cn">Tastill</a>
      */
    @Override
    public void onStart(FileAlterationObserver observer) {
       // System.out.println("启动监听器:");
    }
    @Override
    public void onDirectoryCreate(File directory) {
        logger.info("有新文件夹生成:"+directory.getName());
    }
    @Override
    public void onDirectoryChange(File directory) {
        logger.info("有文件夹内容发生变化:"+directory.getName());
    }
    @Override
    public void onDirectoryDelete(File directory) {
        logger.info("有文件夹被删除:"+directory.getName());
    }
    /**
     * @description 文件创建
     * @param
     * @return
     * @version 2.0, 2019/1/24 14:59
     * @author <a href="Tastill@**.cn">Tastill</a>
     */
    @Override
    public void onFileCreate(File file){
        logger.info("有新文件生成:"+file.getName());
    }
    /**
     * @description 文件内容发生变化
     * @param
     * @return
     * @version 2.0, 2019/1/24 15:05
     * @author <a href="Tastill@**.cn">Tastill</a>
     */
    @Override
    public void onFileChange(File file){
        logger.info("有文件被修改:"+file.getName());
    }
    /**
      * @description 文件被删除
      * @param
      * @return
      * @version 2.0, 2019/1/24 16:13
      * @author <a href="Tastill@**.cn">Tastill</a>
      */
    @Override
    public void onFileDelete(File file){
        logger.info("有文件被删除:"+file.getName());
    }
    /**
     * @description 监听停止
     * @param
     * @return
     * @version 2.0, 2019/1/24 15:07
     * @author <a href="Tastill@**.cn">Tastill</a>
     */
    @Override
    public void onStop(FileAlterationObserver observer){
       // System.out.println("监听停止");
    }
}
发布了57 篇原创文章 · 获赞 44 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/Tastill/article/details/88122094