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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | /* * 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | /* * 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秒扫描指定路径下文件的变化
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 5. Nginx 负载均衡配置案例(附有详细截图说明++)
· Windows 提权-UAC 绕过