删除文件及其父目录(如果它们为空). (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