递归删除文件夹及下所有文件

代码如下:

/**
     * 删除文件夹下所有子孙文件
     * 优点:不产生新对象,对内存友好
     * 缺点:不能删除子孙文件夹
     * @param path
     */
    public static void delDirAndFile(Path path){
        boolean directory = Files.isDirectory(path);
        try {
            if(directory){
                List<Path> collect = Files.list(path).collect(Collectors.toList());
                if(collect.size()==0){
                    Files.deleteIfExists(path);
                }else {
                    collect.forEach(childPath-> delDirAndFile(childPath));
                    // 不删除文件夹,java内部的bug,删除返回成功,但并未真正删除
                    //Files.deleteIfExists(path);
                }
            }else {
                Files.deleteIfExists(path);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 深度删除文件夹
     * 优点:可以删除所有的子孙文件夹及文件
     * 缺点:有多少个文件就会new多少个对象,且在方法执行完才会释放
     * @param dirPath
     */
    public static void deleteDir(String dirPath) {
        File file = new File(dirPath);
        if (file.isFile()) {
            file.delete();
        } else {
            File[] files = file.listFiles();
            if (files == null) {
                file.delete();
            } else {
                for (int i = 0; i < files.length; i++) {
                    deleteDir(files[i].getAbsolutePath());
                }
                file.delete();
            }
        }
    }

使用第一个方法,调试了很久也没找到解决方案。删除空文件夹明明返回的true,但是就是没有删掉,这个使用手动也删除不了。应该是被占用了,不知道有没有大神知道为什么?如何处理;于是,第一个删除文件的方法被阉割了,只能删除文件不能删除文件夹

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值