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

代码如下:

/**
     * 删除文件夹下所有子孙文件
     * 优点:不产生新对象,对内存友好
     * 缺点:不能删除子孙文件夹
     * @param path
     */
    public static void delDirAndFile(Path path){
        boolean directory = Files.isDirectory(path);
        try {
            if(directory){
                List 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,但是就是没有删掉,这个使用手动也删除不了。应该是被占用了,不知道有没有大神知道为什么?如何处理;于是,第一个删除文件的方法被阉割了,只能删除文件不能删除文件夹

你可能感兴趣的:(递归删除文件夹及下所有文件)