在项目中不同数据库中数据迁移的问题中,通过程序或者工具把数据生成文件之后把文件,然后通过文件监控器监控文件的创建,如果有文件的变化,则将新的数据文件的导入到另一个数据库中,实现不同数据库的数据迁移。
在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{ /** * 文件创建执行 */ @Override public void onFileCreate(File file) { System.out.println("[新建]:" + file.getAbsolutePath()); } /** * 文件创建修改 */ @Override public void onFileChange(File file) { System.out.println("[修改]:" + file.getAbsolutePath()); } /** * 文件删除 */ @Override public 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(); } }