spring boot +commons-io实现文件监控

来源:互联网 发布:朗读配音软件 编辑:程序博客网 时间:2024/05/21 22:51

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. 自定义监控器 */@EnableAutoConfigurationpublic 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、运行效果

阅读全文
0 0
原创粉丝点击