统计某目录下的所有文件类型的个数,包括子目录。

统计某目录下的所有文件类型的个数,包括子目录。

代码中都有详细的解释说明,如若没看懂,请留言。

public class StatisticalFileType {
    //创建一个Map集合,将所得到的文件类型放入集合中,Key对应文件类型,Value对应文件出现的次数
    static Map<String, Integer> map = new HashMap<>();
    public static void main(String[] args) {
        //调用type方法,并输入你要统计目录的地址
        type(new File("e:/INFP"));
        //输出map的个数
        System.out.println(map.size());
        //foreach遍历输出
        for (String s:map.keySet()){
         System.out.println(s+"="+map.get(s));
        }
    }
    public  static void  type(File file){
        //判断文件是否为目录是目录则进行遍历递归
        if (file.isDirectory()){
            for (File ff:file.listFiles()){
                if (ff.isDirectory()){
                    type(ff);
                } 
                //如果是文件,则先获得文件的名字
                else if (ff.isFile()) {
                    //未知文件类型
                    String sst="未知类型";
                    //获得文件名
                    String st=ff.getName();
                    //如果文件中包含"."
                    if (st.contains(".")){
                        //截取st中的最后一次出现的"."包含"."以后的内容并赋值给sst
                        sst=st.substring(st.lastIndexOf("."));
                    }
                    //判断,如果集合中K值包含sst,则放进去并把对应的value+1
                    if (map.containsKey(sst)){
                        map.put(sst,map.get(sst)+1);
                    }
                    //否则,K值没有出现过,则放入集合,value值为1
                    else {
                        map.put(sst,1);
                    }
                }
            }
        }
        //和里面的内容一样。如果刚开始判断的是文件,则就直接获取文件的的类型赋予sst后就直接走else语句了
        else if (file.isFile()) {
            String sst="未知类型";
            String st=file.getName();
            if (st.indexOf(".")!=-1){
                sst=st.substring(st.lastIndexOf("."));
            }if (map.containsKey(sst)){
                map.put(sst,map.get(sst)+1);
            }else {
                map.put(sst,1);
            }
        }
    }
}

效果图
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

keyila798

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值