黑马程序员技术交流社区

标题: 毕向东_Java基础视频教程第20天-08-IO流中的getLevel方法求解释 [打印本页]

作者: wenbaoxing    时间: 2013-10-21 18:22
标题: 毕向东_Java基础视频教程第20天-08-IO流中的getLevel方法求解释
本帖最后由 wenbaoxing 于 2013-10-25 17:02 编辑
  1. import java.io.*;

  2. class FileDemo3
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 File dir=new File("e:\\java\\day20\\testdir");
  7.                 showDir(dir,0);
  8.                 //toBin(6);
  9.                 //sop(getSum(8000));

  10.         }

  11.         public static String getLevel(int level)
  12.         {
  13.                 StringBuilder sb=new StringBuilder();
  14.                 for(int i=0;i<level;i++)
  15.                         sb.append("    ");
  16.                 return sb.toString();
  17.         }

  18.         public static void showDir(File dir,int level)
  19.         {
  20.                 sop(getLevel(level)+dir);
  21.                 level++;

  22.                 File[] files=dir.listFiles();
  23.                 for(File file:files)
  24.                 {
  25.                         if(file.isDirectory())
  26.                                 showDir(file,level);
  27.                         else
  28.                                 sop(getLevel(level)+file);
  29.                
  30.                 }

  31.         }

  32.         public static int getSum(int num)
  33.         {
  34.                 if(num==1)
  35.                         return 1;
  36.                 else
  37.                         return num+getSum(--num);
  38.         }
  39.         
  40.         public static void toBin(int num)
  41.         {
  42.                 if(num>0)
  43.                 {
  44.                         toBin(num/2);
  45.                         sop(num%2);
  46.                 }
  47.         }
  48.         
  49.         

  50.         public static void sop(Object obj)
  51.         {
  52.                 System.out.println(obj);
  53.         }
  54. }
复制代码

作者: Jim-剣◆﹏    时间: 2013-10-21 19:02
你这是程序有问题,编译不通过还是没问题呢?具体哪里不明白我要解释哪个点?没有注释看着也挺费劲啊
作者: wenbaoxing    时间: 2013-10-22 00:04
Jim-剣◆﹏ 发表于 2013-10-21 19:02
你这是程序有问题,编译不通过还是没问题呢?具体哪里不明白我要解释哪个点?没有注释看着也挺费劲啊 ...

这是正确的代码,主要是getLevel()这个方法,showDir(),不是很清楚,
作者: Jim-剣◆﹏    时间: 2013-10-24 21:31
  1. public static String getLevel(int level)
  2.      {
  3.           StringBuilder sb=new StringBuilder();
  4.           for(int i=0;i<level;i++)
  5.              sb.append("    ");//把一段固定大小的空字符存入StringBuilder里
  6.               return sb.toString(); //第一次传入0时,StringBuilder的长度为0,返回null
  7.       }
  8.        public static void showDir(File dir,int level)/*程序第一次调用showDir()的时候,level有个初始值0,传入一个路径和初始level
  9.       {                                               此时level=0,首先调用getLevel(0),然后在打印的目录的绝对路径前面什么也不加,如果是传入
  10.                                                       level=1,那么就在绝对路径前加上一段“    ”,如果是level=2,那么加“        ”,以此类推...不说你也懂,详细请看上面getLevel()我的注释
  11.                                                       */
  12.            sop(getLevel(level)+dir);//
  13.            level++;//打印完后level+1,至于为什么要加1,因为第一个遍历的是一个最顶层的目录,所以没有和最顶层的平级的目录了,所以接下来遍历的就是这个顶层目录里的文件了,所以要+1分层级
  14.            File[] files=dir.listFiles();//得到dir目录里面的所有目录和文件的路径
  15.            for(File file:files)
  16.               {
  17.                if(file.isDirectory())//判断这一个文件是否是目录
  18.               showDir(file,level);//如果是,那么就将这个文件作为一个最顶层的目录,递归调用,把该目录看做最顶层的目录,但此时level值已经不是0了,里面再遍历
  19.               else
  20.             sop(getLevel(level)+file);//如果不是目录,那就是文件了,直接打印该文件的路径就对了
  21.                           //此时的level已经是1了,所以前面要有一段“    ”和上级目录区分开
  22.        }

  23.     }
  24. }
复制代码
递归是挺难描述的的,递归我的建议是在自己的电脑上随便挑个小点的目录,然后跟着程序在纸上画一个流程图...看看能不能帮你更好地理解
作者: wenbaoxing    时间: 2013-10-25 17:02
Jim-剣◆﹏ 发表于 2013-10-24 21:31
递归是挺难描述的的,递归我的建议是在自己的电脑上随便挑个小点的目录,然后跟着程序在纸上画一个流程图.. ...

多谢了,挺详细的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2