纲要:
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();