File类的两个小练习

因为file类中的delete方法只能删除文件或空文件夹,不能删除有内容的文件夹,所以写一个方法直接删除有内容的文件夹

import java.io.File;

public class exec4 {
    public static void main(String[] args) {
        //请不要改变file对象pathname,危险,慎用该方法!!!
        try {
            File file = new File("D:\\ddd\\src");
            deleteFile(file);
        }catch (NullPointerException e ){
            System.out.println("请仔细检查该文件是否存在");
            e.printStackTrace();
        }

    }
    //创建删除方法
    public static void deleteFile(File file){
        //接收file对象,遍历,并用file数组接收
        File[] files = file.listFiles();
        //遍历数组中的file对象
        for (File f : files) {
            //如果是文件,删除
            if (f.isFile()){
                f.delete();
            }else{
                //如果是文件夹,使用递归
                //将 f 传入,因为f代表的是数组中的每一个对象。
                deleteFile(f);
            }
        }
        //循环结束后把自己也删除了
        //文件中虽然有一个空文件夹,但是还是进入else环节,然后遍历file放入数组中,
        // 但是发现为空,这时返回一个空数组,即不进行下面的遍历,直接删除自己。一层一层返回到最初。
        file.delete();
    }
}

!!!在写pathname时一定要注意,不要只写盘符, 否则就等着重装系统把,不建议使用该方法,还是自己手动删除方便点,本方法仅供参考,再次强调不建议使用。

 第二个小练习是统计文件格式后缀及其数量

import java.io.File;
import java.util.HashMap;
import java.util.Map;

public class exec6 {
    public static void main(String[] args) {
        //统计文件夹中有多少文件类型及其数量
        HashMap<String, Integer> count = getCount(new File("D:\\ddd"));
        System.out.println(count);
    }
    public static HashMap<String,Integer> getCount(File file){
        //创建HashMap存放数据
        HashMap<String,Integer> hm = new HashMap<>();
        //遍历,结果放入file数组
        File[] files = file.listFiles();
        for (File f : files) {
            //遍历数组,用file对象干什么,去找文件类型并计数
            //先判断是否为文件
            if (f.isFile()){
                //找到并切割文件名后缀,根据 . 来切割
                String[] arr = f.getName().split("\\.");
                //因为 会有a.a.txt或者更多类似情况出现,所以做一个判断,数组的长度大于2时再放入集合
                if (arr.length >= 2){
                    //不管你长度多少,length减1永远是最后一个索引,得到后缀名
                    String endName = arr[arr.length - 1];
                    //得到后缀后做一个判断,是否已经存在hm集合中
                    if (hm.containsKey(endName)){
                        //存在,数量自增
                        int count = hm.get(endName);
                        count++;
                        hm.put(endName,count);
                    }else {
                        //如果不存在,直接添加入集合
                        hm.put(endName,1);
                    }
                }
            }else {
                //如果是文件夹
                //创建一个子集合,接受次次级文件夹的数据
                HashMap<String, Integer> sonMap = getCount(f);
                //遍历sonMap,得到key 和 value
                for (Map.Entry<String, Integer> entry : sonMap.entrySet()) {
                    String key = entry.getKey();
                    Integer value = entry.getValue();
                    //判断父集合hm中是否有该key
                    if (hm.containsKey(key)){
//                        如果有,加上子集合中该key的value值
                        int count = hm.get(key);
                        count += value;//value是子集合中的数量
                        hm.put(key,count);
                    }else {
                        //不存在,直接put
                        hm.put(key,value);
                    }
                }
            }
        }
        return hm;
    }
}

这个小练习有点难度,不懂评论区留言哦!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值