工具类commons-io的文件监控
来源:互联网 发布:java final成员变量 编辑:程序博客网 时间:2024/05/01 16:23
一、前言:
使用Commons-io的monitor下的相关类可以处理对文件进行监控,它采用的是观察者模式来实现的
1、可以监控文件夹的创建、删除和修改
2、可以监控文件的创建、删除和修改
3、采用的是观察者模式来实现的
4、采用线程去定时去刷现检测文件的变化情况
二、代码分析
(一)、FileAlterationListener分析,提供了检测文件夹和文件的变化回调函数的接口,观察模式回调的接口
1、提供了文件夹的创建、删除和修改的接口
2、提供了文件的创建、删除和修改的接口
(二)、FileAlterationListenerAdaptor实现了FileAlterationListener的接口,只是空的实现,可以根据用户的使用情况来处理文件的变化
(三)、FileAlterationObserver重点的观察者模式的类
1、提供对某路径下文件监控
2、使用FileFilter来控制对那些文件进行监控,在实际的使用情况是使用FileFilterUtils来控制,他设置了添加一系列的FileFilter
3、IOCase可以用来对系统的判断,使用是Unix和Windows进行不同的处理,Unix支持文件名的大小写,Windows不区分文件的大小写
(四)、FileAlterationMonitor类
1、它继承了Runnable接口
2、它检测文件的过程是采用一个线程去不停的进行文件的检测
3、精髓之处,文件的内容的改变处理过程
对于文件的变化有点不太准确,只是判断文件名、文件大小、文件的修改日期来判断
( 五)、FileEntry类
1、提供了文件夹和文件夹下文件的层级结构
2、提供了文件是否改变了,采用了备忘录模式(形式上有点,没有很严格的控制),将上一次的状态进行保存,在比较的时候重新读取新的状态,
比较完后备忘录重新将新的状态进行保存。
(六)、Common-io中提供一序列的文件的FileFilter类,使用是可以看情况查看源代码
1、提供了FileFilterUtils来提供添加一些列的FileFilter
2、添加一序列的FileFilter的实现是使用AndFileFilter来实现的
3、提供相识的OrFileFilter和NotFileFilter
三、读源代码的测试代码
package com.yezi.leran.commons.io;import org.apache.commons.io.FileUtils;import org.apache.commons.io.filefilter.FileFilterUtils;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 java.io.File;import java.io.FileFilter;/** * Created by yezi on 2014/6/1. */public class FileAlterationObserverTest { public static void main(String []args) throws Exception{ FileAlterationObserverTest fileAlter = new FileAlterationObserverTest(); fileAlter.test(); String filePath = "C:/Users/yezi/Desktop/test/"; File file = new File(filePath); FileUtils.deleteDirectory(file); file.mkdirs(); //File txtFile = new File(filePath+File.separator+System.currentTimeMillis()+".txt"); //FileUtils.touch(txtFile);// File txtFile = new File("C:/Users/yezi/Desktop/test/1401629335839.txt");// txtFile.deleteOnExit();// FileUtils.touch(txtFile);// File newFile = new File(filePath+File.separator+System.currentTimeMillis());// newFile.mkdirs(); boolean flag = true; while(flag){ /***测试文件的变化代码*/// File newFileTxt = new File(filePath+File.separator+System.currentTimeMillis()+".txt");// FileUtils.touch(newFileTxt);// Thread.sleep(2000);// FileUtils.write(newFileTxt,"1",true);// Thread.sleep(2000);// newFileTxt.delete(); /****测试文件夹的变化代码***/ File newFile = new File(filePath+File.separator+System.currentTimeMillis()); newFile.mkdir(); Thread.sleep(2000); File newFileTxt = new File(newFile.getAbsolutePath()+File.separator+System.currentTimeMillis()+".txt"); FileUtils.touch(newFileTxt); } } public void test() throws Exception{ String filePath = "C:/Users/yezi/Desktop/test/"; FileFilter filter = FileFilterUtils.and(new MyFileFilter()); FileAlterationObserver fileAlterationObserver = new FileAlterationObserver(filePath,filter); fileAlterationObserver.addListener(new FileAlterationListenerAdaptor() { @Override public void onStart(FileAlterationObserver observer) { System.out.println("start on file"); super.onStart(observer); } @Override public void onDirectoryDelete(File directory) { System.out.println("delete file"); super.onDirectoryDelete(directory); } @Override public void onDirectoryCreate(File directory) { System.out.println("create file"); super.onDirectoryCreate(directory); } @Override public void onDirectoryChange(File directory) { System.out.println("change file"); super.onDirectoryChange(directory); } @Override public void onFileCreate(File file) { System.out.println("file create"); super.onFileCreate(file); } @Override public void onFileDelete(File file) { System.out.println("file delete"); super.onFileDelete(file); } @Override public void onFileChange(File file) { System.out.println("file change"); super.onFileChange(file); } }); FileAlterationMonitor fileAlterationMonitor = new FileAlterationMonitor(1000); fileAlterationMonitor.addObserver(fileAlterationObserver); fileAlterationMonitor.start(); }}/*** * 自定义的文件过滤器 */class MyFileFilter implements IOFileFilter { @Override public boolean accept(File file) {// String extension = FilenameUtils.getExtension(file.getAbsolutePath());// if(extension!=null&&extension.equals("txt"))// return true;// return false; return true; } @Override public boolean accept(File dir, String name) { //System.out.println("dir:"+dir+"----->"+name); return true; }}
weu
- 工具类commons-io的文件监控
- 工具类commons-io的Tailer用法,用来监控文件内容的变化情况
- Commons IO方便读写文件的工具类
- Apache Commons-io 常用的操作文件工具类
- 工具类commons-io的FilenameUtils用法
- Apache commons-io 工具类的使用
- spring boot +commons-io实现文件监控
- org.apache.commons.io---实用的文件操作工具
- Java 文件监控,实时监控文件加载之Commons-io
- Java 文件监控,实时监控文件加载之Commons-io
- FileUtils 文件工具类org.apache.commons.io.FileUtils
- 使用Apache.commons.io文件工具类FileUtils,IOUtils使用
- org.apache.commons-io文件工具类FileUtils常用操作
- JAVA commons io工具类的使用用例
- 工具类commons-io中的IOUtils的使用
- 工具类commons-io中的FileUtils的使用
- 使用org.apache.commons.io.FileUtils,IOUtils;工具类操作文件
- 利用commons-io.jar包中FileUtils和IOUtils工具类操作流及文件
- /proc文件系统
- 如何成为坐拥百万的WEB开发者
- Copy-and-swap
- Virtualbox虚拟Ubuntu共享文件夹设置
- 谈谈防 SQL 注入式攻击策略
- 工具类commons-io的文件监控
- POJ1546 Basically Speaking
- Could not open ServletContext resource [/WEB-INF/applicationContext.xml]解决方法
- VIM 学习
- hdu-1944&& 1534 S-Nim
- 类与类之间的几种关系(继承、实现、依赖、关联、聚合、组合)
- 进步权重未必要做有用有品质的反链
- 不用加减乘除做加法
- 5招防范儿童药物性耳聋