统计一个文件夹中每种文件的个数并打印

案例需求
统计一个文件夹中每种文件的个数并打印
打印格式如下:
txt:3个
doc:4个
jpg:6个


步骤:
1、创建一个File对象,封装要统计的文件夹
2、创建一个Map<String,Integer>集合,键存储后缀名,值存储出现的个数
3、创建一个方法,接收File对象和Map集合
(1)通过listFiles方法获取所有的文件和子文件夹
(2)遍历获取每一个文件或者子文件夹
(3)判断,是否是一个文件,如果是则获取后缀名,进行统计
获取文件名
根据文件名获取后缀名
如果在Map集合中不包含这个后缀名的键,则说明第一次出现,将后缀名当做键,1当做值进行存储
如果在Map集合中包含这个后缀名的键,则说明不是第一次出现,将后缀名名当做键,原来的个数+1当做值进行存储
(4)判断,是否是一个文件夹,如果是则递归调用
4、遍历map txt:3个
*/
public class FileTest3 {
public static void main(String[] args) {
// 1、创建一个File对象,封装要统计的文件夹
File dir = new File("E:\\temp");
// 2、创建一个Map<String,Integer>集合,键存储后缀名,值存储出现的个数
Map<String, Integer> map = new HashMap<>();
// 3、创建一个方法,接收File对象和Map集合,调用
getCountMap(dir, map);
// 4、遍历map txt:3个
map.forEach((key, value) -> {
System.out.println(key + ":" + value + "个");
});
}

/*
创建一个方法,接收File对象和Map集合
*/
public static void getCountMap(File dir, Map<String, Integer> map) {
// (1)通过listFiles方法获取所有的文件和子文件夹
File[] files = dir.listFiles();
// (2)遍历获取每一个文件或者子文件夹
for (File file : files) {
// (3)判断,是否是一个文件,如果是则获取后缀名,进行统计
if (file.isFile()) {
// 获取文件名 ,一律转为小写 防止后缀名有大写的问题
String name = file.getName().toLowerCase();// java.txt
// 根据文件名获取后缀名
String[] ss = name.split("\\.");
// 有后缀名,没有后缀名的就过滤掉
if (ss.length >= 2) {
// 获取到后缀名
String suffix = ss[ss.length-1];

// 如果在Map集合中不包含这个后缀名的键,则说明第一次出现,将后缀名当做键,1当做值进行存储
// 如果在Map集合中包含这个后缀名的键,则说明不是第一次出现,将后缀名名当做键,原来的个数+1当做值进行存储
if (!map.containsKey(suffix)) {
map.put(suffix,1);
} else {
map.put(suffix,map.get(suffix)+1);
}
}

} else {
// (4)判断,是否是一个文件夹,如果是则递归调用
getCountMap(file,map);
}
}
}
}
posted @   雾开见月  阅读(526)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示