调用递归后无法删除干净根目录问题
题目:递归删除目录
目录结构为如下(尽量不要在c盘中测试)
firstLevel目录中,包含一个secondLevel目录和a1.txt和b1.java文件
secondLevel目录中包含dir1和dir2两个目录,和a2.txt和b2.java文件
dir1目录中包含a3.txt和b3.java文件
dir2目录是一个空目录
要求删除firstLevel目录
public class Homework {
public static void main(String[] args) {
//创建file对象
File file = new File("e://firstLevel");
//调用deleteLevel方法删除
deleteLevel(file);
}
public static void deleteLevel(File file) {
//获取文件目录
File[] fileDirectory = file.listFiles();
//如果文件目录下有文件
if (fileDirectory.length > 0) {
//循环遍历目录下的文件
for (int i = 0; i < fileDirectory.length; i++) {
//如果是文件则删除
if (fileDirectory[i].isFile()) {
fileDirectory[i].delete();
}
//如果是目录,则调用递归方法,之后将此目录删除
if (fileDirectory[i].isDirectory()) {
deleteLevel(fileDirectory[i]);
fileDirectory[i].delete();
}
}
return;
} else if (fileDirectory == null){
//如果已经没有文件,则返回
return;
}
file.delete();
}
}
执行完毕之后,firstLevel无法删除,只能再次执行代码才能将firstLevel删除。
问题在于if和else中的return在调用完递归之后直接退出递归,没有执行file.delete()
若是第二次执行程序则递归方法中的if else并不执行,直接执行file.delete(),所以第二次可以将firstLevel删除
改进:将if else中的return去掉,void方法不需要返回值也可以,这样就能执行到最后的file.delete(),故而可行