apache-common-io的文件监听问题

ddsxg 2013-03-18 11:37:33
import java.io.File;
import java.io.FileFilter;

public class FileFilterImpl implements FileFilter {

public boolean accept(File pathname) {
System.out.println("file_filter: "+pathname);
return false;
}
}


适配器代码
import java.io.File;

import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationObserver;

public class FileListenerAdaptor extends FileAlterationListenerAdaptor {

@Override
public void onStart(FileAlterationObserver arg0) {
System.out.println("begin listening!");
super.onStart(arg0);
}

@Override
public void onStop(FileAlterationObserver arg0) {
System.out.println("end listening!");
super.onStop(arg0);
}

@Override
public void onDirectoryCreate(File fold) {
System.out.println("fold: " + fold.getAbsolutePath() + " is created.");
super.onDirectoryCreate(fold);
}

@Override
public void onDirectoryChange(File fold) {
System.out.println("fold: " + fold.getAbsolutePath() + " is changed.");
super.onDirectoryChange(fold);
}

@Override
public void onDirectoryDelete(File fold) {
System.out.println("fold: " + fold.getAbsolutePath() + " is deleted.");
super.onDirectoryDelete(fold);
}

@Override
public void onFileCreate(File file) {
System.out.println("file: " + file.getAbsolutePath() + " is created.");
super.onFileCreate(file);
}

@Override
public void onFileChange(File file) {
System.out.println("file: " + file.getAbsolutePath() + " is changed.");
super.onFileChange(file);
}

@Override
public void onFileDelete(File file) {
System.out.println("file: " + file.getAbsolutePath() + " is deleted");
super.onFileDelete(file);
}

}


import java.io.File;

import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;

public class FileListenerTest {

public static void main(String[] args) {
try {
// 构造观察类主要提供要观察的文件或目录,当然还有详细信息的filter
FileAlterationObserver observer = new FileAlterationObserver(
new File("e:\\test1"), new FileFilterImpl(),null);
// 构造收听类
FileListenerAdaptor listener = new FileListenerAdaptor();
// 为观察对象添加收听对象
observer.addListener(listener);
// 配置Monitor,第一个参数单位是毫秒,是监听的间隔;第二个参数就是绑定我们之前的观察对象。
FileAlterationMonitor fileMonitor = new FileAlterationMonitor(
5000, new FileAlterationObserver[] { observer });
// 启动开始监听
fileMonitor.start();
} catch (Exception e) {
System.out.println("监听启动失败!");
e.printStackTrace();
}
}
}


目录 e:\\test1 下只有一个文件,但首次启动时会扫描两次该目录,然后才会正常5秒扫描一次,怎么才能首次启动只调用一次
public boolean accept(File pathname);
方法呢。
...全文
481 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dracularking 2013-03-19
  • 打赏
  • 举报
回复
引用 5 楼 ddsxg 的回复:
Java code?12345678910import java.io.File;import java.io.FileFilter; public class FileFilterImpl implements FileFilter { public boolean accept(File pathname) { System.out.pr……
现在不是很清楚它为什么调用两次的机制,可能首启动就是这样 但这个貌似不会影响你功能的实现,该怎么过滤还是怎么过滤,对于希望过滤的文件pathname,就return false
冰思雨 2013-03-19
  • 打赏
  • 举报
回复
楼主对观察者模式的理解,有点出入。 整个模式的核心,不在过滤器,而在监听器。 楼主着重考虑FileListenerAdaptor 里面的代码,就好了。 过滤器FileFilter设计的目的,只是过滤掉不需要进行监听的文件。 也就是说FileFilterImpl 里面,只决定什么样的文件能进行监听,什么样的文件不监听。 至于,监听到的文件进行什么样的处理,在FileListenerAdaptor 里进行处理。
  • 打赏
  • 举报
回复
楼主是如何判断扫描了两次的?
dracularking 2013-03-18
  • 打赏
  • 举报
回复
首启动 file_filter: e:\test1\abc.txt begin listening! file_filter: e:\test1\abc.txt end listening! 回调了onStart和onStop,一个完整的监听过程,不算两次吧
a18609222133 2013-03-18
  • 打赏
  • 举报
回复
楼主好厉害啊
ddsxg 2013-03-18
  • 打赏
  • 举报
回复
import java.io.File;
import java.io.FileFilter;

public class FileFilterImpl implements FileFilter {  

    public boolean accept(File pathname) {  
        System.out.println("file_filter: "+pathname);  
        return false;  
    }
}
我现在想实现处理所扫描到文件的一些方法,但首启动会调用2次这个方法,应该怎么做啊。
ddsxg 2013-03-18
  • 打赏
  • 举报
回复
引用 2 楼 dracularking 的回复:
首启动 file_filter: e:\test1\abc.txt begin listening! file_filter: e:\test1\abc.txt end listening! 回调了onStart和onStop,一个完整的监听过程,不算两次吧
不太明白啊,为什么监听起动之后,会打印一次 file_filter: e:\test1\abc.txt 首启动就要打印两次 file_filter: e:\test1\abc.txt

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧