功能需求:
指定一个文件夹,获取文件夹中各类文件的个数,并输出打印在控制台
思路分析
因为不确定文件夹的个数,所以采用递归调用的方式。
示例代码
package FIle;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
// 统计一个文件夹中文件的个数并打印
public class Test3 {
public static void main(String[] args) {
// 1.创建文件对象,指定要查找的文件夹
File file = new File("day11");
// 2.定义一个Map集合,用来存储后缀名(key)和出现的数量(value)
Map<String,Integer> map = new HashMap<>();
// 3.调用方法
getCount(map,file);
// 4.输出map集合
System.out.println(map);
}
private static void getCount(Map<String, Integer> map, File file) {
// 防止出现空指针异常,因为文件不能listFile,并且有权限的文件夹也不允许使用listFile,会返回null
if(!file.isDirectory()){
System.out.println(file+"不存在或者不是文件夹");
return;
}
// 获取文件列表数组
File[] listFiles = file.listFiles();
// 增强for遍历
for (File listFile : listFiles) {
// 判断listFile是否是文件夹,如果是,递归
if(listFile.isDirectory()){
getCount(map,listFile);
// 如果不是,切割,获取文件后缀名
}else{
String[] split = listFile.getName().split("\\.");
String fileEndName = split[split.length-1]; //这里必须要length-1,否则会数组越界
// 判断文件后缀名在集合中是否存在
if(map.containsKey(fileEndName)){
// 存在,加一
Integer count = map.get(fileEndName);
count++;
map.put(fileEndName,count);
}else{
// 不存在,直接存入集合
map.put(fileEndName,1);
}
}
}
}
}
运行结果
小白总结
初次学习IO流,能够掌握File类对象的使用确实有些困难,再加上递归的使用,非常容易遗忘,特此记录,如果不足之处,还请路过的有缘人批评指正,谢谢。