springboot使用FileAlterationMonitor完成对指定文件夹下面指定文件的动态监控
使用common-io包
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
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 {@Overridepublic void onStart(FileAlterationObserver observer) {System.out.println("观察文件变化任务开始");}@Overridepublic void onDirectoryCreate(File directory) {System.out.println("创建文件夹" + directory);}@Overridepublic void onDirectoryChange(File directory) {System.out.println("修改文件夹" + directory);}@Overridepublic void onDirectoryDelete(File directory) {System.out.println("删除文件夹" + directory);}@Overridepublic void onFileCreate(File file) {System.out.println("创建文件" + file);}@Overridepublic void onFileChange(File file) {System.out.println("修改文件" + file);}@Overridepublic void onFileDelete(File file) {System.out.println("删除文件" + file);}@Overridepublic 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 {@Resourceprivate 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 {@Resourceprivate FileListenerMonitorUtils fileListenerMonitorUtils ;@PostConstructprivate 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完成对指定文件夹下面指定文件的动态监控相关推荐
- R语言使用fs包的dir_create函数在指定路径下创建新的文件夹、使用file_create函数在指定文件夹下创建文件
R语言使用fs包的dir_create函数在指定路径下创建新的文件夹.使用file_create函数在指定文件夹下创建文件 目录
- Java删除指定文件夹下的文件和目录
Java删除指定文件夹下的文件和目录 import java.io.File;public class TestFile {public static void main(String[] args) ...
- C#获取文件夹下指定格式的所有文件
C#获取文件夹下指定格式的所有文件的方法,虽然很简单,但还是分享一下吧,用到时可以稍加修改和优化就可以使用. 获取指定目录下所有文件 //最要使用 System.IO.Directory.GetFil ...
- [云炬Python学习笔记] Python读取指定文件夹下的文件
1 # -*- coding: utf-8 -*-2 import csv3 import os4 import pandas as pd5 #提取文件夹下的地址+文件名,源文件设定排序规则6 def ...
- C# 读取指定文件夹下所有文件
#region 读取文件 //返回指定目录中的文件的名称(绝对路径)string[] files = System.IO.Directory.GetFiles(@"D:\Test" ...
- python 实现统计ftp服务器指定目录下文件夹数目、文件数目及所有文件大小 本次主要为满足应用方核对上传到ftp服务器的文件是否缺漏。 主要要求:指定目录下,文件夹数目/文件数目/所有文件大小
python 实现统计ftp服务器指定目录下文件夹数目.文件数目及所有文件大小 本次主要为满足应用方核对上传到ftp服务器的文件是否缺漏. 主要要求:指定目录下,文件夹数目/文件数目/所有文件大小,类 ...
- php遍历文件夹下文件内容_PHP递归遍历指定文件夹内的文件实现方法
今天早上在地铁上看了关于文件和文件夹的一章,正好最近刚搞懂linux的文件系统,觉得对文件属性的访问跟Shell命令很像,所以想晚上来实践一下. 发现php的文件夹函数好像没有提供遍历文件夹下的所有文 ...
- bat递归查找指定文件_批处理脚本遍历指定文件夹下的文件
批处理脚本 1. 遍历指定文件夹下的文件 1.1 命令解释 命令: for [参数] %%变量名 in (匹配符) do (执行的命令) 切记:每个指令之间必须以空格隔开,in 与 ( 之间有空格,d ...
- VB得到指定文件夹下的文件列表
代码如下: Function GetFileList(ByVal Path As String, ByRef FileName() As String, Optional fExp As String ...
- python获取文件夹下指定后缀名文件列表(可手工设定是否遍历子文件夹)cmd复制文件命令使用
打算写一个替换文件的程序,该文件可能在不同文件夹路径,使用python操作肯定最方便,特此简单整理封装了两个python函数和一个cmd复制文件的命令方法,供自己翻阅或来者参考 辉 2022.8.9. ...
最新文章
- 【Android 应用开发】对Android体系结构的理解--后续会补充
- IntelliJ IDEA 的 Build Project/Build Module/构建项目/构建模块
- 去掉input密码框自动补全功能
- mysql架构深入_mysql性能优化2:深入认识mysql体系架构
- HbuliderX 历史版本下载
- 三步搞定android应用底部导航栏
- 这年头,千万不要花钱创业
- C++11在加入<thread>头文件后Socket服务器接收不到消息
- python3.6安装pyspider
- WES7创建系统恢复盘
- 2022钉钉杯A题思路及代码:银行卡电信诈骗危险预测
- 定义Student类,该类中有Sting name和int age两个属性,该类实现Comparable接口,实现根据学生姓名和年龄排序,该类重写toString()输出学生的姓名和年龄。
- PCB表面贴片元件的手工焊接技巧
- python人民币小写转大写_python人民币小写转大写辅助工具
- Vue, App与我(十三)
- mysql 主键 默认索引_mysql 主键和默认 设为索引的规则
- C++方式实现人民币小写转大写
- JAVA开发方向和就业方向
- php从气象局获取天气预报并保存到服务器
- 【Java面试题】List如何一边遍历,一边删除?
热门文章
- 亲爱的,60句感人歌词,有没有一句触动了你
- 2022年第十七届研电赛报名|安谋科技(Arm China)命题:基于特定开发平台的理性智能体设计
- PHP获取Opcode及C源码
- 部署ServletContext的时候报错 Class com.xxxxx.ContextServlet is not a Servlet
- 服务器开通网站来宾帐户,IIS 增加Internet来宾用户权限
- 网络空间安全基础(待续)
- Feature Selective Anchor-Free(FSAF)
- ICS文件说明和创建(以Outlook为例)
- lisp边长注记_小程序cad批量注记建筑物边长
- python 编写的 pdf 裁剪工具 删除空白页