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个
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 参保人员因患病来不及到指定的医疗机构就医,能否报销医疗费用()
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- Java|Java基础——数组
- RxJava|RxJava 在Android项目中的使用(一)
- java之static、static|java之static、static final、final的区别与应用