listFiles(FileFilter)
作为参数,接口中只有一个方法
boolean accept(File pathname)
测试pathname是否应该包含在当前的File目录中,符合则返回true
accept
方法,参数为File,表示当前File下所有的子文件和子目录,保留住则返回true,过滤掉则返回false,
案例演示1.文件过滤器案例一//自定义文件过滤器public static void main(String[] args){ File file=new File("G:\21-java\file练习"); printFile(file);}public static void printFile(File file){ File[] files=file.listFiles(new FileFilter(){ @Override public boolean accept(File pathname){ return pathname.getName().endWith(".java")||pathname.isDirectory(); } }); //循环打印 for(File file:files){ System.out.println("文件名:"+file.getAbsplutePath()); }else{ printFile(file); }}2.文件过滤器案例二需求分析键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key,用个数作为value,放入到map集合中,并用两种方式遍历map集合例如:doc 的类型的文件有 x 个java 的类型的文件有 x 个txt 的类型的文件有 x 个 public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入已有文件路径(如G:\21-java\测试):"); String str = scanner.next(); File file = new File(str); Map<String, Integer> map = new HashMap<>(); add(file,map); Set<String> set = map.keySet(); for (String s : set) { System.out.println("文件类型:"+s+"有"+map.get(s)+"个"); }}
public static void add(File file, Map<String,Integer> map) {
File[] files = file.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { if (pathname.isDirectory()||pathname.getName().endsWith(".java")|| pathname.getName().endsWith(".doc")|| pathname.getName().endsWith(".txt")) { return true; } return false; } }); for (File file1 : files) { if (file1.isDirectory()) { File[] files1 = file1.listFiles(); for (File file2 : files1) { add(file2, map); } } else { String str = file1.getName(); String[] ss = str.split("\."); if (ss[1].equals(".java")) { map.put(ss[1], map.get(ss[1]) + 1); } else { map.put(ss[1], 1); } } }}