昨天遇到一道很基础题,查询某一目录下的文件名,如果该文件下还有文件,继续查找文件名,直到没有文件名为止,用树状表示出来。
遇到这道题看到首先想到循环能不能解决问题,但已知总量不知道,所以不能用循环,考虑递归为最优方法。
递归思想就是循环的嵌套,一层调用下一层,直到没有为止。那靠什么决定返回了,Java提供了很好的关键字return解决是否继续进行。
话不多说 ,先贴上代码
package day2;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class Test2 {
// static int n=0;
//为什么递归方法要设置静态的呢?这是因为在静态方法中只能调用静态方法,不能调用非静态方法,如果想调用非静态方法一定要new对象。
public static void LookFile(File myf,int level)
{
String preStr = "";
for(int i=0; i<level; i++) { preStr += " "; }
//设置变量决定树形空格
System.out.println(preStr+myf.getName());
File[] childs = myf.listFiles();
if(!myf.isDirectory()) return;
//这个return很主要,如果这个文件夹没有就return回去,return在递归中很重要,如果不进行方法调用就return不用返回值就回去了。
for(int i=0; i<childs.length; i++) {
LookFile(childs[i],level+1);
}
}
public static void main(String[] args) {
String str="D://eclipse最新//eclipse//eclipse//workspace//MyStudyTest//mydir1";
File myf=new File(str);
try{
LookFile(myf, 0);//查看文件夹可能有空情况,出现异常要用catch
}catch(Exception e){
System.out.println("没有文件");
}
}
}