目录列表–DirFilter这个类存在的唯一原因就是将accept()方法。创建这个类的目的在于把accept()方法提供给list()使用,使list()可以回调accept(),进而决定那些文件包含在列表中。
package cn.io;
import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.regex.Pattern;
public class DirList {
public static void main(String[] args) {
File path = new File(".");
String [] list;
if(args.length == 0)
list = path.list();
else
list = path.list(new DirFilter(args[0]));
Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);
for(String dirItem:list)
System.out.println(dirItem);
}
}
class DirFilter implements FilenameFilter{
private Pattern pattern;
public DirFilter(String regex){
pattern =Pattern.compile(regex);
}
public boolean accept(File dir,String name){
return pattern.matcher(name).matches();
}
}
匿名—注意,传向filter()的参数必须未final。这在匿名内部类中是必须的,这样它才能够使用来自
该类范围之外的对象。
package cn.io;
import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.regex.Pattern;
public class DIrList2 {
public static FilenameFilter filter(final String regex){
return new FilenameFilter(){
private Pattern pattern = Pattern.compile(regex);
public boolean accept(File dir,String name){
return pattern.matcher(name).matches();
}
};//End of anonymous inner class(匿名内部类)
}
public static void main(String[] args) {
File path = new File(".");
String [] list;
if(args.length == 0)
list = path.list();
else
list = path.list(filter(args[0]));
Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);
for(String dirItem:list)
System.out.println(dirItem);
}
}
优化–定义一个作为list()参数的匿名内部类
public class DirList3 {
public static void main(final String[] args) {
File path = new File(".");
String [] list;
if(args.length == 0)
list =path.list();
else
list = path.list(new FilenameFilter() {
private Pattern pattern = Pattern.compile(args [0]);
public boolean accept(File dir,String name){
return pattern.matcher(name).matches();
}
});
Arrays.sort(list ,String.CASE_INSENSITIVE_ORDER);
for(String dirItem:list)
System.out.println(dirItem);
}
}