Commons-IO 2.0中文件监控器的源代码
???????????? 在项目中不同数据库中数据迁移的问题中,通过程序或者工具把数据生成文件之后把文件,然后通过文件监控器监控文件的创建,如果有文件的变化,则将新的数据文件的导入到另一个数据库中,实现不同数据库的数据迁移。
??????????? 在Apache的Commons-IO 2.0中有关于文件的监控功能的代码,在项目中采用Commons-IO 2.0中代码实现文件变化的监控。
????????????在Commons-IO 2.0中文件监控的原理如下:
?? 由文件监控类FileAlterationMonitor中的线程不停的扫描文件观察器FileAlterationObserver,如果有文件的变化,则根据相关的文件比较器,判断文件时新增,还是删除,还是更改。(默认为1000毫秒执行一次扫描)
?
?
其中文件变化的监控器接口FileAlterationListener如下:
package org.apache.commons.io.monitor;import java.io.File;public abstract interface FileAlterationListener{ public abstract void onStart(FileAlterationObserver paramFileAlterationObserver); public abstract void onDirectoryCreate(File paramFile); public abstract void onDirectoryChange(File paramFile); public abstract void onDirectoryDelete(File paramFile); public abstract void onFileCreate(File paramFile); public abstract void onFileChange(File paramFile); public abstract void onFileDelete(File paramFile); public abstract void onStop(FileAlterationObserver paramFileAlterationObserver);}?
?
测试类代码如下:
?
package easyway.tbs.app.files;import java.io.File;import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;/** * 文件变化监听器 * * @author longgangbai * */public class EasywayFileListener extends FileAlterationListenerAdaptor{ /** * 文件创建执行 */@Overridepublic void onFileCreate(File file) {System.out.println("[新建]:" + file.getAbsolutePath());} /** * 文件创建修改 */@Overridepublic void onFileChange(File file) {System.out.println("[修改]:" + file.getAbsolutePath());} /** * 文件删除 */@Overridepublic void onFileDelete(File file) {System.out.println("[删除]:" + file.getAbsolutePath());}}?
?
测试代码如下:
package easyway.tbs.app.files;import java.util.concurrent.TimeUnit;import org.apache.commons.io.filefilter.FileFilterUtils;import org.apache.commons.io.monitor.FileAlterationMonitor;import org.apache.commons.io.monitor.FileAlterationObserver;/** * 文件监控测试 * @author longgangbai * */public class FileMonitorTest {/** * @param args * @throws Exception */public static void main(String[] args) throws Exception {// 监控目录String rootDir = "c:\\upload";// 轮询间隔 5 秒long interval = TimeUnit.SECONDS.toMillis(5);// 创建一个文件观察器用于处理文件的格式FileAlterationObserver observer = new FileAlterationObserver( rootDir, FileFilterUtils.and( FileFilterUtils.fileFileFilter(), FileFilterUtils.suffixFileFilter(".doc")), //过滤文件格式 null);observer.addListener(new EasywayFileListener()); //设置文件变化监听器//创建文件变化监听器FileAlterationMonitor monitor = new FileAlterationMonitor(interval,observer);// 开始监控monitor.start();}}?
1 楼 trunk 2011-06-20 楼主 是否有EasywayFileListener中的方法会被执行2次。。。