读书人

Commons-IO 2.0汉语件监控器的源代码

发布时间: 2012-11-14 10:12:18 作者: rapoo

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次。。。
例如你修改有一个文件,那么onFileChange方法被执行2次。。。。。。? 2 楼 trunk 2011-06-20 我用的是2.0.1 3 楼 trunk 2011-06-20 2.0也是有同样的问题啊。。刚刚找了个2.0的包试了下。。。 4 楼 longgangbai 2011-06-22 trunk 写道2.0也是有同样的问题啊。。刚刚找了个2.0的包试了下。。。

我执行了同样的实验,修改一次,执行一次,没有你说的那种情况。 5 楼 longgangbai 2011-06-22 trunk 写道楼主 是否有EasywayFileListener中的方法会被执行2次。。。
例如你修改有一个文件,那么onFileChange方法被执行2次。。。。。。?

你说的情况是将文件打开一次,写入文件一部分保存,在写入一部分保存,那么会执行两次! 6 楼 wyz666888 2012-07-24 谢谢博主分享 我找了好久 试了好多方法 终于找到好使的了 我测试了 修改文件的时候不会出现 被执行两次 的情况 我昨天用 JNotify 做的文件监控 但是修改的时候 执行两次操作 今天早上弄到现在 我实现弄不好了 就想换个方法吧 哈哈 就找到了楼主共享的方法 不错哈 借鉴了 最后还是十分感谢 7 楼 longgangbai 2012-07-30 wyz666888 写道谢谢博主分享 我找了好久 试了好多方法 终于找到好使的了 我测试了 修改文件的时候不会出现 被执行两次 的情况 我昨天用 JNotify 做的文件监控 但是修改的时候 执行两次操作 今天早上弄到现在 我实现弄不好了 就想换个方法吧 哈哈 就找到了楼主共享的方法 不错哈 借鉴了 最后还是十分感谢
知识,分享

读书人网 >软件架构设计

热点推荐