springboot使用FileAlterationMonitor完成对指定文件夹下面指定文件的动态监控

使用common-io包

       commons-io

       commons-io

       2.6

1.创建实现了FileAlterationListenerAdaptor的监听器

package com.holidaylee.listener;

import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.springframework.stereotype.Component;

import java.io.File;

@Component
public class FileListenerExample extends FileAlterationListenerAdaptor {
   @Override
   public void onStart(FileAlterationObserver observer) {
      System.out.println("观察文件变化任务开始");
   }

   @Override
   public void onDirectoryCreate(File directory) {
      System.out.println("创建文件夹" + directory);
   }

   @Override
   public void onDirectoryChange(File directory) {
      System.out.println("修改文件夹" + directory);
   }

   @Override
   public void onDirectoryDelete(File directory) {
      System.out.println("删除文件夹" + directory);
   }

   @Override
   public void onFileCreate(File file) {
      System.out.println("创建文件" + file);
   }

   @Override
   public void onFileChange(File file) {
      System.out.println("修改文件" + file);
   }

   @Override
   public void onFileDelete(File file) {
      System.out.println("删除文件" + file);
   }

   @Override
   public void onStop(FileAlterationObserver observer) {
      System.out.println("观察文件变化任务结束");
   }
}

2.添加获取指定目录指定文件观察者的工具类

package com.holidaylee.util;

import com.holidaylee.listener.FileListenerExample;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.io.File;
import java.util.concurrent.TimeUnit;

@Component
public class FileListenerMonitorUtils {

   @Resource
   private FileListenerExample  fileListenerExample ;

   /**
    * 生成monitor,一intervalSeconds监听directory文件夹下面的以suffix结束,prefix开头的文件
    *
    * @param directory       监视的文件夹
    * @param intervalSeconds 轮训时间
    * @param suffix          监视文件的后缀
    * @param prefix          监视文件的前缀
    * @return 文件观察者
    */
   public FileAlterationMonitor getMonitor(File directory, Long intervalSeconds, String prefix, String suffix) {
      long interval = TimeUnit.SECONDS.toMillis(intervalSeconds);
      IOFileFilter directories = FileFilterUtils.and(FileFilterUtils.directoryFileFilter());
      IOFileFilter suffixFilter = FileFilterUtils.suffixFileFilter(suffix);
      IOFileFilter prefixFilter = FileFilterUtils.prefixFileFilter(prefix);
      IOFileFilter files = FileFilterUtils.and(FileFilterUtils.fileFileFilter(),
            suffixFilter, prefixFilter);
      IOFileFilter filter = FileFilterUtils.or(directories, files);
      FileAlterationObserver observer = new FileAlterationObserver(directory, filter);
      observer.addListener(fileListenerExample);
      FileAlterationMonitor monitor = new FileAlterationMonitor(interval, observer);
      return monitor;
   }
}

3.为指定文件夹下面的指定文件注册并开启观察者服务

package com.holidaylee.config;

import com.holidaylee.util.FileListenerMonitorUtils ;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.io.File;

@Component
public class FileMonitorRegisterConfig {
   @Resource
   private FileListenerMonitorUtils fileListenerMonitorUtils ;

   @PostConstruct
   private void register() {
      File directory = new File("/app/test");
      if (!directory.exists()) {
         throw new NullPointerException("目录不存在启动文件观察者失败:" + directory);
      }
      Long intervalSeconds = 5L;
      String prefix = "test_";
      String suffix = ".json";
      try {
         // 为指定文件夹下面的指定文件注册文件观察者
         FileAlterationMonitor monitor = fileListenerMonitorUtils.getMonitor(directory, intervalSeconds, prefix, suffix);
         // 启动观察者
         monitor.start();
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

注明:

本文为学习记录笔记,不喜勿喷。

你可能感兴趣的:(springboot使用FileAlterationMonitor完成对指定文件夹下面指定文件的动态监控)