使用Apache Commons IO实现文件系统监听服务

Apache Commos IO中的org.apache.commons.io.monitor包提供了文件系统监听的功能。以FileAlterationObserver为核心,配合FileAlterationListener,FileAlterationMonitor,可以实现对文件系统的事件监听。

创建事件监听的过程大体如下:

  1. 创建FileAlterationListener实现对文件与目录的创建,修改,删除事件的处理
  2. 为特定目录向FileAlterationObserver注册FileAlterrationListerner
  3. 自行执行FileAlterationObserver,或者将其向FileAlterationMonitor注册

官方给的一些例子

为特定目录创建FileAlterationObserver并注册FileAlterationListener

File directory = new File(new File("."), "src");
FileAlterationObserver observer = new FileAlterationObserver(directory);
observer.addListener(...);
observer.addListener(...);

FileAlterationListenerAdaptor是一个FileAlterationListener的空实现,使用其可以方便监听器的生成,不再需要考虑不为业务所需的接口方法的实现。

自行调用init()初始化oberser后再按需调用checkAndNotify()

// intialize
observer.init();
...
// invoke as required
observer.checkAndNotify();
...
observer.checkAndNotify();
...
// finished
observer.finish();

向FileAlterationMonitor注册FileAlterationObserver,FileAlterationObserver将按指定的时间间隔在新的线程被调用

long interval = ...
FileAlterationMonitor monitor = new FileAlterationMonitor(interval);
monitor.addObserver(observer);
monitor.start();
...
monitor.stop();

通过使用FileFilter可以实现只监听文件系统的部分内容,只对感兴趣的文件或目录进行监听,减少不需要的事件响应,提高运行效率。Apache Commons IO默认提供了一些开箱即用的Filter实现可供使用,也提供了FileFilterUtils工具类用于方便Filter的组合。

利用Filefilter实现仅监听"src"根目录中的目录以及以“.java”为后缀的文件

// Create a FileFilter
IOFileFilter directories = FileFilterUtils.and(
                                      FileFilterUtils.directoryFileFilter(),
                                      HiddenFileFilter.VISIBLE);
IOFileFilter files = FileFilterUtils.and(
                                      FileFilterUtils.fileFileFilter(),
                                      FileFilterUtils.suffixFileFilter(".java"));
IOFileFilter filter = FileFilterUtils.or(directories, files);

// Create the File system observer and register File Listeners
FileAlterationObserver observer = new FileAlterationObserver(new File("src"), filter);
observer.addListener(...);
observer.addListener(...);
发布了106 篇原创文章 · 获赞 15 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/skyupward/article/details/104837466