1、pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.sun</groupId>
<artifactId>cui-monitor</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.7.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
</dependencies>
</project>
2、FileListener
package cn.sunline.Listener; import org.apache.commons.io.monitor.FileAlterationListenerAdaptor; import org.apache.commons.io.monitor.FileAlterationObserver; import org.apache.log4j.Logger; import java.io.*; /** * Created by Rick on 2017/12/18. * * 文件变化监听器 * * 在Apache的Commons-IO中有关于文件的监控功能的代码. 文件监控的原理如下: * 由文件监控类FileAlterationMonitor中的线程不停的扫描文件观察器FileAlterationObserver, * 如果有文件的变化,则根据相关的文件比较器,判断文件时新增,还是删除,还是更改。(默认为1000毫秒执行一次扫描) * * */ public class FileListener extends FileAlterationListenerAdaptor { private Logger log = Logger.getLogger(FileListener.class); /** * 文件创建执行 */ public void onFileCreate(File file) { log.info("[新建]:" + file.getAbsolutePath()); } /** * 文件创建修改 */ public void onFileChange(File file) { log.info("[修改]:" + file.getAbsolutePath()); BufferedReader buf = null; try { buf = new BufferedReader(new InputStreamReader(new FileInputStream(file),"GBK")); BufferedReader br = new BufferedReader(buf); String line = null; System.out.println(br.readLine()); } catch (IOException e) { e.printStackTrace(); } finally { // 这里释放系统 IO 资源 try {if (buf != null){buf.close();}}catch (Exception e){} } } /** * 文件删除 */ public void onFileDelete(File file) { log.info("[删除]:" + file.getAbsolutePath()); } /** * 目录创建 */ public void onDirectoryCreate(File directory) { log.info("[新建]:" + directory.getAbsolutePath()); } /** * 目录修改 */ public void onDirectoryChange(File directory) { log.info("[修改]:" + directory.getAbsolutePath()); } /** * 目录删除 */ public void onDirectoryDelete(File directory) { log.info("[删除]:" + directory.getAbsolutePath()); } public void onStart(FileAlterationObserver observer) { // TODO Auto-generated method stub super.onStart(observer); } public void onStop(FileAlterationObserver observer) { // TODO Auto-generated method stub super.onStop(observer); } }
3、启动类
package cn.sunline; import cn.sunline.Listener.FileListener; import cn.sunline.controller.SampleController; import org.apache.commons.io.filefilter.FileFilterUtils; import org.apache.commons.io.filefilter.HiddenFileFilter; import org.apache.commons.io.filefilter.IOFileFilter; import org.apache.commons.io.monitor.FileAlterationListenerAdaptor; import org.apache.commons.io.monitor.FileAlterationMonitor; import org.apache.commons.io.monitor.FileAlterationObserver; import org.apache.log4j.Logger; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.ComponentScan; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.io.*; import java.util.concurrent.TimeUnit; /** * Created by Rick on 2017/12/18. 自定义监控器 */ @EnableAutoConfiguration public class AppServer { final static Logger logger = Logger.getLogger(AppServer.class); public static void main(String[] args) throws Exception { SpringApplication.run(AppServer.class, args); System.out.println("*********************************启动成功*********************************"); // 监控目录 String rootDir = "D:\\test"; // 轮询间隔 5 秒 long interval = TimeUnit.SECONDS.toMillis(1); // 创建过滤器 IOFileFilter directories = FileFilterUtils.and( FileFilterUtils.directoryFileFilter(), HiddenFileFilter.VISIBLE); IOFileFilter files = FileFilterUtils.and( FileFilterUtils.fileFileFilter(), FileFilterUtils.suffixFileFilter(".txt")); IOFileFilter filter = FileFilterUtils.or(directories, files); // 使用过滤器 FileAlterationObserver observer = new FileAlterationObserver(new File(rootDir), filter); //FileAlterationObserver observer = new FileAlterationObserver(new File(rootDir)); observer.addListener(new FileListener()); //创建文件变化监听器 FileAlterationMonitor monitor = new FileAlterationMonitor(interval, observer); // 开始监控 try{ monitor.start(); System.out.println("***************监控中***************"); } catch (Exception e){ logger.error("异常处理",e); } } }
4、运行效果