这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战
递归函数
?什么是递归函数,就是一个函数自己调用自己本身,当我们执行一个递归函数时,必须要有一个结束条件,因为递归函数会反复不断的调用自身,就像进入死循环一样,只有当满足结束条件时才会停止。
最典型的实例就是删除文件。现在有这样一个命题,已知一个路径,可以是文件也可以是文件夹,结果是要删除这个路径下的所有内容,如果是文件就删除自身。 但是要求每次删除的文件夹下面不能有其他文件和文件夹,这就必须要不断重复的调用相同的删除文件内容的函数,这就是递归思想,只有这样才能将目标路径下的内容全部删除掉,还要做一些必要的判空条件。当然最重要的是结束条件,当该路径如果是个文件,则文件已被删除就return结果,或者该路径是个目录,目录为空时则return结果。
上代码:
public class FileDeleteDemo {
public static void main(String[] args) {
File f = new File("D:\test\test.txt");
deleteFile(f);
}
public static void deleteFile(File file) {
// 首先判断这个路径下的是文件夹/目录,不是的话就直接删除
if (file.isDirectory()) {
// 如果是文件夹/目录,就删除其下所有的文件和文件夹
File[] files = file.listFiles();
// 此时要要用到for循环遍历一遍,找出所有的文件和文件夹,再分别处理
for (File f : files) {
// 如果是文件,就删除
if (f.isFile()) {
System.out.println("已经被删除的文件:" + f);
// 删除文件
f.delete();
} else if (file.isDirectory()) {
// 如果是文件夹,就递归调用文件夹的方法,这里就是重复调用自身的函数以达到循环删除文件夹所有内容。
deleteFile(f);
}
}
// 如果是个空文件夹,则删除文件夹自己,即最底层文件夹删除成功。
System.out.println("已经被删除的文件夹:" + file);
file.delete();
return;// 文件夹被删除后,直接用return语句结束当次递归调用
}
// 如果是文件,就直接删除自己
System.out.println("已经被删除的文件:" + file);
file.delete();
}
}