我正在尝试做一个简单的方法来删除一个文件,如果它们是空的,直到它到达一个基本目录,但我不能让它工作。
它删除了文件,它的父目录,但是它的下一个父目录并没有被删除,因为它抛出了一个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());
}
如果有人能给出更好的解决方案,这个问题仍然有待批准。谢谢。