利用FilenameFilter实现图片过滤器,实现过滤后缀为jpg/png/bmp的代码如下:
import java.io.File;
import java.io.FilenameFilter;
public class PicFilter {
private static boolean isJpg(String name) {
return name.toLowerCase().endsWith(".jpg");
}
private static boolean isPng(String name){
return name.toLowerCase().endsWith(".png");
}
private static boolean isBmp(String name){
return name.toLowerCase().endsWith(".bmp");
}
public static void main(String[] args){
File directory = new File("C:\\pic");
final String[] files = directory.list(new FilenameFilter(){
public boolean accept(File dir, String name) {
return isJpg(name) | isPng(name) | isBmp(name);
}});
for(String fileItem:files){
System.out.print(fileItem + "\n");
}
}
}
匿名内部类FilenameFilter的作用就是提供一个accept()的方法;利用此类,为list()提供accept()方法,当list()判断该返回哪些文件名的时候,能够"回过头来调用"accept( )方法,这种结构通常被称为回调(callback)。
更准确地说,由于list()实现了基本功能,而FilenameFilter提供了"对外服务所需的算法",因此这是一种"策略模式(Strategy Pattern)"。