先写过滤器 implements FilenameFilter,用于过滤指定扩展名的文件
package cn.itcast.io.b.filter;
import java.io.File;
import java.io.FilenameFilter;
/**
* 用于过滤指定扩展名的文件。
* @author Teaching
*
*/
public class FilenameFilterBySuffix implements FilenameFilter {
private String suffix;
public FilenameFilterBySuffix(String suffix) {
super();
this.suffix = suffix;
}
@Override
public boolean accept(File dir, String name) {
return name.endsWith(suffix);
}
}
package cn.itcast.io.a.file;
import java.io.File;
import cn.itcast.io.b.filter.FilenameFilterBySuffix;
public class FileMethodDemo4 {
/**
* @param args
*/
public static void main(String[] args) {
/*
* 需求2:获取目录中的内容,但是只要.java文件。
*/
File dir = new File("E:\\Java_Code\\day06");
File[] files = dir.listFiles(new FilenameFilterBySuffix(".JPG"));// 需要传递一个文件名过滤器 FilenameFilter对象。
/*listFiles源码解析。
public File[] listFiles(FilenameFilter filter) {//FilenameFilter filter = new FilenameFilterByJava()
String ss[] = list();//调用了File类中的list()获取到所有的名称数组 ss。
if (ss == null) return null;//健壮性判断,如果数组为null,就返回。
ArrayList<File> files = new ArrayList<>();//创建一个集合。元素是File类型。
for (String s : ss)//遍历名称数组。
if ((filter == null) || filter.accept(this, s))//对遍历的名称进行过滤器的判断。将 当前目录this,遍历到名称s传递给accept方法。
//一旦条件满足过滤器的过滤条件。
files.add(new File(s, this));//将满足过滤条件添加到集合中。添加是 将文件名称和当前目录封装成File对象。new File(dir,name);
return files.toArray(new File[files.size()]);//将集合转成数组返回,为啥呢?不需要增删操作。
}
*/
for (File file : files) {
//if(file.getName().endsWith(".jpg")){
System.out.println(file.getName());
}
}
}