- public static String getLevel(int level)
- {
- StringBuilder sb=new StringBuilder();
- for(int i=0;i<level;i++)
- sb.append(" ");//把一段固定大小的空字符存入StringBuilder里
- return sb.toString(); //第一次传入0时,StringBuilder的长度为0,返回null
- }
- public static void showDir(File dir,int level)/*程序第一次调用showDir()的时候,level有个初始值0,传入一个路径和初始level
- { 此时level=0,首先调用getLevel(0),然后在打印的目录的绝对路径前面什么也不加,如果是传入
- level=1,那么就在绝对路径前加上一段“ ”,如果是level=2,那么加“ ”,以此类推...不说你也懂,详细请看上面getLevel()我的注释
- */
- sop(getLevel(level)+dir);//
- level++;//打印完后level+1,至于为什么要加1,因为第一个遍历的是一个最顶层的目录,所以没有和最顶层的平级的目录了,所以接下来遍历的就是这个顶层目录里的文件了,所以要+1分层级
- File[] files=dir.listFiles();//得到dir目录里面的所有目录和文件的路径
- for(File file:files)
- {
- if(file.isDirectory())//判断这一个文件是否是目录
- showDir(file,level);//如果是,那么就将这个文件作为一个最顶层的目录,递归调用,把该目录看做最顶层的目录,但此时level值已经不是0了,里面再遍历
- else
- sop(getLevel(level)+file);//如果不是目录,那就是文件了,直接打印该文件的路径就对了
- //此时的level已经是1了,所以前面要有一段“ ”和上级目录区分开
- }
- }
- }
复制代码 递归是挺难描述的的,递归我的建议是在自己的电脑上随便挑个小点的目录,然后跟着程序在纸上画一个流程图...看看能不能帮你更好地理解 |