编程语言
首页 > 编程语言> > 删除文件及其父目录(如果它们为空). (Java)

删除文件及其父目录(如果它们为空). (Java)

作者:互联网

我正在尝试一个简单的方法,删除文件的上层目录,如果它们是空的,直到它到达基目录,但我不能使它工作.

它删除文件及其父目录,但是,它的下一个父项不会被删除,因为它会抛出DirectoryNotEmptyException.它确实是空的,因为只有一个子目录,并且它在上一次迭代中被删除.

因此,文件被删除,其父项被删除,并在那里停止,不再删除上层目录.

编辑:(修改后的代码)

似乎延迟删除目录,因此在下一次检查目录的空白状态时,前一个目录尚未删除.所以我添加了一个while循环来检查,直到该目录不存在.我不知道这是不是一个坏技术,但它适合我的需要.

public static void removeFileAndParentsIfEmpty(Path path) throws IOException {
    if(path == null || path.endsWith(FilesPath.BILLS_DIRECTORY)) {
        return;
    }
    if (Files.isRegularFile(path)){
        Files.deleteIfExists(path);
    } else if (Files.isDirectory(path)){
        if(path.toFile().list().length == 0){
            Files.delete(path);
            while(Files.exists(path));
        }else{
            return;
        }
    } else {
        return;
    }
    removeFileAndParentsIfEmpty(path.getParent());
}

如果有人能提供更好的解决方案,那么这个问题仍然需要批准.
谢谢.

解决方法:

您没有空目录的基本条件,因此在第二个遍历您的递归函数时,它会尝试在目录本身之前删除空目录parent.一个简单的代码更改应该足以解决这个问题:

public static void removeFileAndParentsIfEmpty(Path path)
        throws IOException {
    if(path == null || path.endsWith(BASEPATH)) return;

    if (Files.isRegularFile(path)) {
        Files.deleteIfExists(path);
    } else if(Files.isDirectory(path)) {
        try {
            Files.delete(path);
        } catch(DirectoryNotEmptyException e) {
            return;
        }
    }

    removeFileAndParentsIfEmpty(path.getParent());
}

标签:java,java-7,java-io
来源: https://codeday.me/bug/20190826/1725280.html