【IO流】05 - file类中的方法 - 过滤器
先写过滤器 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()); } } }