Java中File相关方法的综合小案例

需求:统计某确定文件夹下每种文件的个数并打印。(考虑路径下所有子文件夹)

public class test {
    public static void main(String[] args) {
        File file = new File("C:\\Users\\Lenovo\\Desktop\\test\\test\\aaa");      //自定义文件夹路径
        HashMap<String, Integer> hm = getCount(file);                    //创建hashmap保存文件名和个数,键为文件名,值为个数
        System.out.println(hm);
    }

    public static HashMap<String, Integer> getCount(File src){
        HashMap<String, Integer> hm = new HashMap<>();                   
        File[] files = src.listFiles();                            //调用listFile()方法获取文件夹下所有内容
        for (File file : files) {                                //增强for遍历src下每一个file对象
            if(file.isFile()){                                  //判断file对象是文件而不是文件夹
                String[] arr = file.getName().split("\\.");                //split方法分隔文件名,注意正则表达式,“.”要用转义字符
                if(arr.length >= 2){                              //判断文件返回的数组元素个数,小于2则说明无后缀名,不统计这种文件
                    String endName = arr[arr.length - 1];                 //endName是文件后缀名
                    if(hm.containsKey(endName)){                       //判断hashmap中是否有当前后缀名,如果有就把数目+1
                        Integer count = hm.get(endName);
                        count++;
                        hm.put(endName, count);
                    }else {
                        hm.put(endName, 1);                          //新的后缀名就调用put方法加入hashmap
                    }
                }
            }else {                                        //运行到这里表示当前file是文件夹
                HashMap<String, Integer> sonMap = getCount(file);            //递归调用本方法进入到子文件夹
                Set<Map.Entry<String, Integer>> entries = sonMap.entrySet();      //调用entrySet()方法把hashmap中的键值对元素存到新的集合中以后续遍历 
                for (Map.Entry<String, Integer> entry : entries) {
                    String key = entry.getKey();
                    Integer value = entry.getValue();
                    if(hm.containsKey(key)){                         //判断hm中是否有子文件夹下的key,也就是是否含有子文件夹文件的后缀名
                        hm.put(key,value + hm.get(key));                  //hm中含有此后缀名,直接将value更新
                    }else {
                        hm.put(key,value);                          
                    }
                }
            }
        }
        return hm;                                         //返回hashmap
    }

}

此案例综合了很多方面的知识,包括正则表达式的运用,File的方法调用,增强for的调用,split方法的灵活运用,hashmap的方法,适合作为日常练习使用。

 

posted @ 2023-03-20 00:48  烤盐咸鱼  阅读(5)  评论(0编辑  收藏  举报