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