【发布时间】:2012-11-14 08:21:42
【问题描述】:
我正在尝试做一个简单的方法,如果文件的上层目录为空,则删除它的上层目录,直到它到达基目录,但我无法使其工作。
它会删除文件及其父目录,但不会删除其下一个父目录,因为它会抛出 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());
}
如果有人能给出更好的解决方案,这个问题仍然有待批准。 谢谢。
【问题讨论】:
-
抛出异常时方法是否停止,我的意思是,如果 Files.delete() 抛出 DirectoryNotEmptyException,它会被捕获并且方法结束而不进行另一个递归调用,还是我错了?
-
哦,抱歉,错过了重新通话,我的错:P