apache commons学习系列记录之IO组件version2.4之二

来源:互联网 发布:知乎 let it go 编辑:程序博客网 时间:2024/06/05 04:34

纲要:

org.apache.commons.io.filefilter 文件过滤器

org.apache.commons.io.comparator比较器

LockableFileWriter

org.apache.commons.io.monitor侦测文件或目录的变化情况。



二、org.apache.commons.io.filefilter 文件过滤器

组合过滤器,预定义的各种过滤器,以及正则表达式过滤,文件大小过滤,扩展名过滤等等。

IOFileFilter接口继承了jdk中的FileFilter,FilenameFilter接口

FileFilter的组合:

    封装多个Filter从而组合成一个新的FileFilter:如:AndFileFilter,OrFileFilter类似

具体的Filter实现类:

CanReadFileFilter:枚举:CAN_READ,CONNOT_READ,READ_ONLY等

CanWriteFileFilter枚举:CAN_WRITE,CANNOT_WRITE

HiddenFileFilter:HIDDEN,VISIBLE

DirectoryFileFIlter枚举:DIRECTORY

EmptyFileFilter枚举:EMPTY,NOT_EMPTY

FalseFileFilter枚举:FALSE,总是返回false的过滤器;还有一个TrueFileFilter

FileFileFilter枚举:FILE


RegexFileFilter:根据正则表达式过滤:

SizeFileFilter:根据文件大小过滤:

PrefixFileFilter,
SuffixFileFilter:根据后缀过滤:




1. 过滤器组合AndFileFilter、OrFileFilter


AndFileFilter(IOFileFilter filter1, IOFileFilter filter2)

         Constructs a new file filter that ANDs the result of two other filters.    

AndFileFilter(List<IOFileFilter> fileFilters)

         Constructs a new instance ofAndFileFilterwith the specified list of filters.    

2.RegexFileFilter:根据正则表达式过滤:


File dir = new File(".");
FileFilter fileFilter = new RegexFileFilter("^.*[tT]est(-\\d+)?\\.java$");
File[] files = dir.listFiles(fileFilter);
for (int i = 0; i < files.length; i++) {
  System.out.println(files[i]);
}

3.SizeFileFilter:根据文件大小过滤:

File dir = new File(".");
String[] files = dir.list( new SizeFileFilter(1024 * 1024) );
for ( int i = 0; i < files.length; i++ ) {
    System.out.println(files[i]);
}

SizeFileFilter(long size)
          Constructs a new size file filter for files equal to or
larger than a certain size.SizeFileFilter(long size,boolean acceptLarger)
          Constructs a new size file filter for files based on a certain size threshold.

对于acceptLarger:acceptLarger- if true, files equal to or larger are accepted,
otherwise smaller ones (but not equal to)

4.SuffixFileFilter

SuffixFileFilter:根据后缀过滤:
File dir = new File(".");
String[] files = dir.list( new SuffixFileFilter(".java") );
for (int i = 0; i < files.length; i++) {
    System.out.println(files[i]);
}

SuffixFileFilter(List<String> suffixes);

SuffixFileFilter(String[] suffixes)

SuffixFileFilter(List<String> suffixes, IOCase caseSensitivity)其中IOCase枚举SENSITIVE,INSENSITIVE



三、org.apache.commons.io.comparator
文件比较器与过滤器的用法类似。具体看API文档。
四其他包中的有用方法:

LockableFileWriter确保只有一个线程在写入文件。给文件加锁写入,在调用close()方法时释放。确保多线程写入安全性。除非文件特别重要时采用此方法。


五、org.apache.commons.io.monitor侦测文件或目录的变化情况。


FileAlterationMonitor, FileAlterationObserver和FileAlterationListener接口与FileAlterationListenerAdapter:开启一个线程来实时监听文件的变化。
如文件或目录改变,删除,创建等事件


File directory = new File(new File("."), "src");    FileAlterationObserver observer = new FileAlterationObserver(directory);    observer.addListener(...);    observer.addListener(...);创建观察者后有两种选择,1.手动运行观察和停止;2.通过FileAlterationMonitor来启动一个新的线程进行统一的管理。第一种方式如下 // intialize    observer.init();    ...    // invoke as required    observer.checkAndNotify();    ...    // finished    observer.finish();第二种方式:会启动一个新的线程来进行管理所有的观察者。同时可以指定时间间隔。以避免频繁检查。long interval = ...    FileAlterationMonitor monitor = new FileAlterationMonitor(interval);    monitor.addObserver(observer);//注册观察者到监听器    monitor.start();    ...    monitor.stop();

本人博客小站原文

0 0
原创粉丝点击