JAVA|JAVA 获取指定目录下各级子目录中每种类型文件的个数

package learn; import java.io.File; import java.util.Map; import java.util.Set; import java.util.TreeMap; import java.util.Map.Entry; public class Demo2 { public static void main(String[] args) { // 获取指定目录下各级子目录中每种类型文件的个数String path = "E:/"; getFileName(path,""); // 递归获取目录及文件信息的方法 } // 递归获取目录及文件信息的方法 public static void getFileName(String path, String space) { File rootFile = new File(path); // 1.本层级文件信息数组 File[] files = rootFile.listFiles(); // 2. Map 用于储存在每层递归中 【文件后缀 ==> 出现次数】的映射关系 //TreeMap 相较于 HashMap 保持了插入顺序 Map, Integer> fileNumMap = new TreeMap, Integer>(); int num = 1; // 此后缀类型文件出现次数// 3. 遍历文件数组 找出对应的文件 和 目录 for (File fileItem : files) { // 4. 如果是目录 输出目录名 并输出对应的【|---】分隔字串 if(fileItem.isDirectory()) { System.out.println(space + fileItem.getName()); }// 5. 如果是文件 利用上述创建的Map集合 以 【文件后缀 ==> 出现次数】的映射关系 来存储 if(fileItem.isFile()) { String fileName = fileItem.getName(); // 获取文件名 String extName = getFileExt(fileName); // 获取文件后缀名// 5.1 维护出现次数的逻辑 if(fileNumMap.containsKey(extName)) { num++; }// 5.2 存值 fileNumMap.put(extName, num); }// 5.3如果是目录 再次递归调用本方法 //可能会因为目录无权限打开导致的空指针异常,所以用try catch 来包裹下 if(fileItem.isDirectory()) { try { getFileName(fileItem.getPath(), space + "|---"); } catch (Exception e) { System.out.println(space + fileItem.getName() + "目录无权限访问"); } } }// 6. 打印上述存储的本文件夹层级中的 Map 集合信息 Set> set = fileNumMap.entrySet(); for (Entry,Integer> item : set) { System.out.println(space + "【." + item.getKey() + "】文件" + item.getValue() + "个"); } } // 获取文件后缀名 public static String getFileExt(String fileName) {String[] fileExtArr = fileName.split("\\."); return fileExtArr[fileExtArr.length - 1]; }}

附上本机的执行结果
【JAVA|JAVA 获取指定目录下各级子目录中每种类型文件的个数】$RECYCLE.BIN
|—S-1-5-21-4252138582-3700411359-3807062794-1001
|—|---【.ini】文件 1个
JAVA-CODE
|—.idea
|—|---【.gitignore】文件 1个
|—|---【.html】文件 1个
|—|---【.xml】文件 5个
|—day_01
|—|---test
|—|---|—cn
|—|---|—|---LiuYang
|—|---|—|---|—day_01
|—|---|—|---|—|---【.class】文件 2个
|—|---|—|---ZhaoSi
|—|---|—|---|—day_01
|—|---|—|---|—|---【.class】文件 2个
|—|---|—【.java】文件 2个
|—|---【.class】文件 3个
|—|---【.java】文件 2个
|—day_02
|—|---【.txt】文件 1个
|—day_03
|—|---【.class】文件 4个
|—|---【.java】文件 5个
|—day_04
|—|---【.class】文件 6个
|—|---【.java】文件 7个
|—day_05
|—|---【.class】文件 1个
|—|---【.java】文件 1个
|—day_06
|—|---【.class】文件 3个
|—|---【.java】文件 4个
|—day_07
|—|---【.java】文件 1个
|—day_10
|—|---【.class】文件 1个
|—|---【.java】文件 1个
|—day_11
|—|---【.CHM】文件 1个
|—|---【.doc】文件 1个
|—|---【.pdf】文件 1个
|—day_12
|—|---resume
|—|---|—css
|—|---|—|---【.css】文件 1个
|—|---|—img
|—|---|—|---【.jpg】文件 1个
|—|---|—js
|—|---|—【.html】文件 1个
|—|---【.pdf】文件 1个
|—homework
|—|---day_02
|—|---|—【.class】文件 1个
|—|---|—【.java】文件 1个
|—|---day_03
|—|---|—【.class】文件 3个
|—|---|—【.java】文件 4个
|—|---day_04
|—|---|—【.class】文件 1个
|—|---|—【.java】文件 1个
|—|---day_05
|—|---|—【.class】文件 6个
|—|---|—【.java】文件 7个
|—|---day_06
|—|---|—【.class】文件 10个
|—|---|—【.java】文件 11个
|—|---day_07
|—|---|—【.class】文件 1个
|—|---|—【.java】文件 1个
|—|---day_08
|—|---|—【.class】文件 8个
|—|---|—【.java】文件 9个
|—|---day_10
|—|---|—【.class】文件 1个
|—|---|—【.java】文件 1个
|—src
|—|---com
|—|---|—company
|—|---|—|---【.java】文件 1个
|—【.iml】文件 1个
|—【.zip】文件 1个
MyPro
|—.idea
|—|---【.gitignore】文件 1个
|—|---【.html】文件 1个
|—|---【.xml】文件 5个
|—out
|—|---production
|—|---|—MyPro
|—|---|—|---com
|—|---|—|---|—company
|—|---|—|---|—|---【.class】文件 2个
|—src
|—|---com
|—|---|—company
|—|---|—|---【.java】文件 2个
|—【.iml】文件 1个
System Volume Information
System Volume Information目录无权限访问
【.avi】文件 1个
【.txt】文件 1个

    推荐阅读