0
点赞
收藏
分享

微信扫一扫

递归遍历文件夹,获取文件夹中各类文件的个数

皮皮球场 2022-01-11 阅读 167

功能需求:

指定一个文件夹,获取文件夹中各类文件的个数,并输出打印在控制台

思路分析

因为不确定文件夹的个数,所以采用递归调用的方式。

示例代码

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类对象的使用确实有些困难,再加上递归的使用,非常容易遗忘,特此记录,如果不足之处,还请路过的有缘人批评指正,谢谢。
举报

相关推荐

0 条评论