A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

列出目录下所有内容--带层次,这部分的程序代码不是太懂,大家能否解释的清楚一点?
  1. import java.io.*;
  2. class FileDemo3{
  3.   public static void main(String[] args){
  4.      File dir=new File("d:\\test");
  5.          showDir_level(dir,0);
  6.   }
  7.    public static void showDir_level(File dir,int level){
  8.     System.out.println(getLevel(level)+dir.getName());
  9.         level++;
  10.     File[] files=dir.listFiles();
  11.         for(int x=0;x<files.length;x++){
  12.            if(files[x].isDirectory())
  13.               showDir_level(files[x],level);
  14.            else
  15.              System.out.println(getLevel(level)+files[x]);
  16.         }
  17.   }
  18.   public static String getLevel(int level){
  19.     StringBuilder sb=new StringBuilder();
  20.         sb.append("|--");
  21.         for(int x=0;x<level;x++){
  22.            sb.insert(0,"|  ");
  23.         }
  24.         return sb.toString();
  25.   }
  26. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
首先楼主应该知道  一个目录下可能有n多级的目录  你写代码的时候根本不知道下面有多少级   所以就必须用递归的方法
  执行步骤  1.列出已知路径的里的所有File,然后遍历判断它是目录还是文件,如果是文件的话,直接输出名字就O了   如果是目录  把目录名字改了以后继续遍历(也就是继续调用你自己写的遍历的方法)  这个就是递归了.
回复 使用道具 举报
package cn.itcast.melon;

import java.io.*;

class FileDemo3{
  public static void main(String[] args){
     File dir=new File("d:\\test");        //在内存创建文件对象,指向 d:\test
         showDir_level(dir,0);
  }
   public static void showDir_level(File dir,int level){        //分级显示
    System.out.println(getLevel(level)+dir.getName());        //首先打印一次文件夹或文件夹的名字
        level++;//级数自增
    File[] files=dir.listFiles();        //将文件或文件夹封装成数组
        for(int x=0;x<files.length;x++){        //对文件数组遍历
           if(files[x].isDirectory())        //如果是目录
              showDir_level(files[x],level);        //递归,重新遍历目录下的元素
           else
             System.out.println(getLevel(level)+files[x]);        //按级输出,文件或文件夹路径名
        }
  }
  public static String getLevel(int level){        //获得级数,级数用符号代替
    StringBuilder sb=new StringBuilder();
        sb.append("|--");
        for(int x=0;x<level;x++){
           sb.insert(0,"|  ");
        }
        return sb.toString();
  }
}

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1 很给力!

查看全部评分

回复 使用道具 举报
本帖最后由 周朋飞 于 2012-7-2 21:04 编辑

import java.io.*;

class FileMutilList {

        public static void main(String[] args) {

                File dir = new File("d:\\test");

                showDir_level(dir, 0);

        }

        public static void showDir_level(File dir, int level) {

                System.out.println(getLevel(level) + dir.getName());//第一次执行到这里的时候打印出来的是|--加上你的文件的名字,
                                                                          //然后下次进来说明又往里面进了一层也就是存在文件时目录的情况

                level++;

                File[] files = dir.listFiles();

                for (int x = 0; x < files.length; x++) {

                        if (files[x].isDirectory())

                                showDir_level(files[x], level);//你执行到了这里说明你的文件时文件夹,要进里面去查看文件 所以重新执行,
                                                              //重新执行就会再进一层level就会++ 这样每次都会增加一个字符串|--这样层次级别不是显示出来了吗
                                                                                                //其实就是多加了些符号而已

                        else

                                System.out.println(getLevel(level) + files[x]);

                }

        }

        public static String getLevel(int level) {

                StringBuilder sb = new StringBuilder();

                sb.append("|--");//首先会执行到这里给sb添加一个括号当中的字符串,因为level为0所以直接返回“|--“

                for (int x = 0; x < level; x++) {

                        sb.insert(0, "|  ");

                }

                return sb.toString();

        }

}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马