在项目中不同数据库中数据迁移的问题中,通过程序或者工具把数据生成文件之后把文件,然后通过文件监控器监控文件的创建,如果有文件的变化,则将新的数据文件的导入到另一个数据库中,实现不同数据库的数据迁移。
在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();
}
}