学到java的递归,难免会又学这个删除文件的程序。
1 package com.mcz.io; 2 3 import java.io.File; 4 5 public class RecursionTest { 6 public static boolean deleteAll(File file){ 7 if(file.isFile()|| file.list().length == 0){ 8 file.delete(); 9 }else { 10 File[] files = file.listFiles(); 11 for (File f : files) { 12 deleteAll(f); 13 f.delete(); 14 } 15 } 16 return true; 17 } 18 public static void main(String[] args) { 19 boolean a = deleteAll( new File("d:\abc")); 20 file.delete(); 21 System.out.println(a); 22 } 23 }
我们要搞清楚,delete方法要求我们删除的目录里面要为空才可以被删除,了解之后我们就要想
分析一下:
一个递归算法的出口是最重要的,那么我们删除文件,就是首先传入的是一个File类型的对象,
判断它是否一个文件或它是否一个空目录
if(file.isFile()|| file.list().length == 0)
因为我们用的是“||”所以与短路情况,,如果第一个为真,那么第二个就不执行了。那么我们直接删掉就可以;
如果不是的话,我们就要执行后面递归,
file里面有东西,所以我们要获取file里面的东西,再遍历它,
删除里面的所有东西。
File[] files = file.listFiles();
for (File f : files) {
deleteAll(f);
f.delete();
递归算法最重要的是deleteAll方法里面的东西,只要自己想清楚了,就会觉得容易了。