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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 粺¹³¼畅 中级黑马   /  2014-8-31 19:01  /  1705 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 粺¹³¼畅 于 2014-8-31 19:03 编辑
  1. import java.io.File;
  2. /*
  3. * 显示带层级的目录下所有文件
  4. */
  5. public class FileDemo5 {
  6.        public static void main(String[] args) {
  7.                 File dir = new File("D:\\work");
  8.                 showDir(dir, 0);
  9.         }
  10.         public static void showDir(File dir, int level) {
  11.                 System.out.println(getLevel(level)+dir.getName());
  12.                 level++;
  13.                 File[] files = dir.listFiles();
  14.                 for(int x=0; x<files.length; x++) {
  15.                         if(files[x].isDirectory()) //是目录吗?
  16.                                 showDir(files[x], level); //递归思想,因为目录中还有目录。
  17.                         else
  18.                                 System.out.println(getLevel(level)+files[x].getName());
  19.                 }
  20.         }
  21.         public static String getLevel(int level) {
  22.                 StringBuilder sb = new StringBuilder();
  23.                 sb.append("+ "); //全部加上"+"
  24.             for(int x=0; x<level; x++){
  25.                     sb.insert(0, "  ");
  26.                 }
  27.                 return sb.toString();
  28.         }
  29. }
复制代码
输出结果:这样子

能不能把红框中的+号去掉,只在目录的前面显示+号?


5 个回复

倒序浏览
  1. <span style="line-height: 2.2em;">你看下图是这个意思吗?  </span>在你的基础上修改了一下,主要判断是不是目录,是就加号,不是就不加就可以了。
复制代码


222.jpg (41.93 KB, 下载次数: 13)

222.jpg
回复 使用道具 举报
代码怎么显示不出来,,,你看看是不是我上面发的图的效果,基于你的修改了下,判断是否为目录就可以了

package cn.geekspace.exam;


import java.io.File;

/*
* 显示带层级的目录下所有文件
*/
public class Testt {
       public static void main(String[] args) {
                File dir = new File("c:\\a");
                showDir(dir, 0);
        }
        public static void showDir(File dir, int level) {
                System.out.println(getLevel(level, dir.isDirectory())+dir.getName());
                level++;
                File[] files = dir.listFiles();
                for(int x=0; x<files.length; x++) {
                        if(files[x].isDirectory()) //是目录吗?
                                showDir(files[x], level); //递归思想,因为目录中还有目录。
                        else {
                                System.out.println(getLevel(level, files[x].isDirectory())+files[x].getName());
                        }
                }
        }
        public static String getLevel(int level, boolean isDirectory) {
                StringBuilder sb = new StringBuilder();
                if(isDirectory)
                        sb.append("+ "); //全部加上"+"
            for(int x=0; x<level; x++){
                    sb.insert(0, "  ");
                }
                return sb.toString();
        }
}
回复 使用道具 举报 1 0
如果你是想都用getLevel(int level)这一个方法, 就不让他有+号的话, 可以加个判断标记.然后改一下getLevel(int level)方法的代码.
不过我感觉这样不太好....
你最好在重新写一个没有加号的方法.
还有, 用替换应该也行,
else                      //把下面这个方法用字符转的方法替换一下
          //我记得应该是这个方法replace(char oldChar, char newChar)
    System.out.println(getLevel(level)+files[x].getName());
他本来不是有一个加号么.  你把那个加号替换成空格
你这个主要就是改else里面的东西.怎么改都随你, 好多种方法的
回复 使用道具 举报
判断一下是不是文件夹  是文件夹就加上,否则不加!
回复 使用道具 举报
单线程xia 发表于 2014-8-31 19:20
代码怎么显示不出来,,,你看看是不是我上面发的图的效果,基于你的修改了下,判断是否为目录就可以了

pa ...

谢谢,真的解决了!!我刚看到这,还不太熟悉,判断是不是目录还是不太会用。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马