java监控指定路径下文件及文件夹变化
之前用jdk7的WatchService API(java.nio.file包)来做目录下的子文件监控,后改为使用commons-io包。主要有下面几点不同:1. WatchService是采用扫描式的,效率低,commons-io是使用事件驱动的,效率高;2. WatchService代码写起来费劲 3. WatchService不能监听到孙文件目录(多级目录),事先父文件夹需要存在,而FileAlterationObserver可以监听多级目录,父目录事先不存在也没问题。http://commons.apache.org/proper/commons-io/,
commons-io功能介绍:
1) 工具类
FilenameUtils
2)
FileMonitor工具类包,监听该文件及文件夹变化
3)filters过滤器
org.apache.commons.io.filefilter
4) Comparators
org.apache.commons.io.comparator包下的工具类,可以方便进行文件的比较
5)
input/output包 common io的org.apache.commons.io.input
/ org.apache.commons.io.output 包,其中好特别的是TeeOutputStream能将一个输入流分别输出到两个输出流
commons-io-2.3.jar 中,有实现文件监控的类,在org.apache.commons.io.monitor包下,
主要包括 observer ,listener,monitor 含义你懂得滴,典型观察者模式,直接上代码:
listener:
/*
* Version 1.0.0
* Created on 2017年12月23日
* Copyright ReYo.Cn
*/
package reyo.sdk.utils.test.file; import java.io.File; import org.apache.commons.io.monitor.FileAlterationListener;
import org.apache.commons.io.monitor.FileAlterationObserver; /**
* <B>创 建 人:</B>AdministratorReyoAut <BR>
* <B>创建时间:</B>2017年12月23日 下午9:25:21<BR>
*
* @author ReYo
* @version 1.0
*/
public class ReYoFileListener implements FileAlterationListener { ReYoFileMonitor monitor = null; @Override
public void onStart(FileAlterationObserver observer) {
//System.out.println("onStart");
} @Override
public void onDirectoryCreate(File directory) {
System.out.println("onDirectoryCreate:" + directory.getName());
} @Override
public void onDirectoryChange(File directory) {
System.out.println("onDirectoryChange:" + directory.getName());
} @Override
public void onDirectoryDelete(File directory) {
System.out.println("onDirectoryDelete:" + directory.getName());
} @Override
public void onFileCreate(File file) {
System.out.println("onFileCreate:" + file.getName());
} @Override
public void onFileChange(File file) {
System.out.println("onFileCreate : " + file.getName());
} @Override
public void onFileDelete(File file) {
System.out.println("onFileDelete :" + file.getName());
} @Override
public void onStop(FileAlterationObserver observer) {
//System.out.println("onStop");
} }
monitor
/*
* Version 1.0.0
* Created on 2017年12月23日
* Copyright ReYo.Cn
*/
package reyo.sdk.utils.test.file; import java.io.File; import org.apache.commons.io.monitor.FileAlterationListener;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver; /**
* <B>创 建 人:</B>AdministratorReyoAut <BR>
* <B>创建时间:</B>2017年12月23日 下午9:26:08<BR>
*
* @author ReYo
* @version 1.0
*/
public class ReYoFileMonitor { FileAlterationMonitor monitor = null; public ReYoFileMonitor(long interval) throws Exception {
monitor = new FileAlterationMonitor(interval);
} public void monitor(String path, FileAlterationListener listener) {
FileAlterationObserver observer = new FileAlterationObserver(new File(path));
monitor.addObserver(observer);
observer.addListener(listener);
} public void stop() throws Exception {
monitor.stop();
} public void start() throws Exception {
monitor.start();
} public static void main(String[] args) throws Exception {
ReYoFileMonitor m = new ReYoFileMonitor(5000);
m.monitor("D:\\temp", new ReYoFileListener());
m.start();
}
}
启动后,每5秒扫描指定路径下文件的变化
java监控指定路径下文件及文件夹变化的更多相关文章
- java压缩指定目录下的所有文件和文件夹的代码
将代码过程较好的代码段备份一下,下边资料是关于java压缩指定目录下的所有文件和文件夹的代码,希望对码农有帮助. String sourceDir="E:\test";int pa ...
- python之实现循环查看指定路径下的所有文件---os.walk
循环查看指定路径下的所有文件.文件夹,包含隐藏文件注:“.filename” 以点开头的是隐藏文件 import os for cur_path,cur_dirs,cur_files in os.wa ...
- Python小代码_15_遍历指定路径下的所有文件和文件夹,并格式化输出文件路径文件名和文件夹名,文件大小,修改时间
遍历指定路径下的所有文件和文件夹,并格式化输出文件路径文件名和文件夹名,文件大小,修改时间 import osimport datetime def print_tree(dir_path): for ...
- vc++ 监控指定路径下文件变化
参考MSDN文档 https://docs.microsoft.com/zh-cn/windows/desktop/api/winbase/nf-winbase-readdirectorychange ...
- Python3在指定路径下递归定位文件中出现的字符串
[本文出自天外归云的博客园] 脚本功能:在指定的路径下递归搜索,找出指定字符串在文件中出现的位置(行信息). 用到的python特性: 1. PEP 318 -- Decorators for Fun ...
- [Erlang27]如何监控指定目录下的*.beam文件,如果有改动就更新到指定的节点?
在Erlang In Anger第二章中讲到使用rebar来创建一个Erlang项目(Application或Project) 但美中不足的只是给出了指引,但没有给出详细的步骤. 下面我们就使用reb ...
- nodejs 获取指定路径下所有的文件夹名
示例:获取 ./components 下所有的文件夹名称 let components = [] const files = fs.readdirSync('./components') files. ...
- java获取指定路径下的指定文件/java.io.File.listFiles(FilenameFilter filter)
java.io.File.listFiles(FilenameFilter filter) 返回抽象路径名数组,表示在目录中此抽象路径名表示,满足指定过滤器的文件和目录. 声明 以下是java.io. ...
- java读取项目路径下的中文文件乱码问题
出现乱码错误: 处理方案: 对文件路径中存在中文的,都要进行URLDecoder.decode(path,"UTF-8")编码转换 wordContent = URLEncoder ...
随机推荐
- 《java程序设计》结对编程-四则运算整体总结
需求分析(描述自己对需求的理解,以及后续扩展的可能性) 实现一个命令行程序,要求: 自动生成小学四则运算题目(加,减,乘,除) 支持整数 支持多运算符(比如生成包含100个运算符的题目) 支持真分数 ...
- 深度学习Bible学习笔记:第六章 深度前馈网络
第四章 数值计算(numerical calculation)和第五章 机器学习基础下去自己看. 一.深度前馈网络(Deep Feedfarward Network,DFN)概要: DFN:深度前馈网 ...
- hdu1754splaytree区间查询
以前用线段树做的题..发现splay好神奇 splay的区间查询就是把那个区间移到两个节点之间进行操作即可,同时每次rotate不要忘记pushup #include<iostream> ...
- iOS学习笔记之触摸事件&UIResponder
iOS学习笔记之触摸事件&UIResponder 触摸事件 与触摸事件相关的四个方法如下: 一根手指或多根手指触摸屏幕 -(void)touchesBegan:(NSSet *)touches ...
- 20165203 《网络对抗技术》week1 Kali的安装与配置
20165203 <网络对抗技术>week1 Kali的安装与配置 本人感觉Kali可以做很多有意思的事情,下面是本人的Kali的安装过程. 安装过程 光盘映像文件的下载 登录官网,选择下 ...
- 《剑指offer》-逐层打印二叉树
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 乍一看就是一个BFS,但是因为太久没刷题都忘记了要使用queue来作为空间存储容器了. 先参考milolip的代码,写出这样 ...
- 【APUE | 7】命令形参、函数
命令形参 命令行参数是使用main()函数参数来处理的,其中,argc是指传入参数的个数,argv[]是一个指针数组,指向传递给程序的每个参数. 应当指出的是, argv[0]存储程序的名称,argv ...
- 浅析C语言的变量
参考资料 寄存器变量 用register声明的变量是寄存器变量,是存放在CPU的寄存器里的.而我们平时声明的变量是存放在内存中的.虽说内存的速度已经很快了,不过跟寄存器比起来还是差得远. 寄存器变量和 ...
- 解决Linux下Qt编译出现"cannot find -lGL"以及无法安装libgl1-mesa-dev的问题
在Linux系统下安装好Qt5,打开Qt Creator新建一个最简单的工程,编译却出现"cannot find -lGL"错误. 在网上搜索解决方法,找到的方案基本上是安装lib ...
- java算法:统计数字-将数字转换成字符串,然后使用字符串String.valueOf()方法进行判断
题目: 计算数字 k 在 0 到 n 中的出现的次数,k 可能是 0~9 的一个值. 样例 样例 1: 输入: k = 1, n = 1 输出: 1 解释: 在 [0, 1] 中,我们发现 1 出现了 ...