Java之File文件过滤器


File类与文件过滤器相关的方法

listFiles(FileFilter)作为参数,接口中只有一个方法

boolean accept(File pathname)测试pathname是否应该包含在当前的File目录中,符合则返回true

accept方法,参数为File,表示当前File下所有的子文件和子目录,保留住则返回true,过滤掉则返回false,保留规则如:

  1. 要么是.java文件

  2. 要么是目录,用于继续遍历

FileFilter接口概述

java.io.FileFilter是一个接口,该接口的对象可以传递给File类

案例演示

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);
          }
      }
  }
}

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM