递归遍历目录 深度问题

cooc2000 2013-04-26 03:44:19
目录结构 例如
a
a-1/a-11/a-111
b-1/b-11/b-111/b-1111

c
c-1/c-11/c-111
d-1/d-11/d-111/d-111

已知一个目录列表 如上的 a c 目录 遍历子目录 按深度2来遍历

结果就是
a
a-1/a-11/
b-1/b-11/

c
c-1/c-11/
d-1/d-11/

递归的时候怎么得到深度呢
...全文
162 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cooc2000 2013-04-26
  • 打赏
  • 举报
回复

    private void addNode(DefaultMutableTreeNode root, File list[]) {
        if (list == null || list.length <= 0) {
            return;
        }
        for (File file : list) {
            if (file.isDirectory()) {
                DefaultMutableTreeNode node = new DefaultMutableTreeNode(file.getName());
                root.add(node);
                String path = file.getAbsolutePath().replace(dir, "");
                if (path.indexOf("\\") != -1) {
                    String tmp[] = path.split("\\\\");
                    if (tmp.length < 2) {
                        addNode(node, c.files(file.getAbsolutePath()));
                    }
                }else{
                    addNode(node, c.files(file.getAbsolutePath()));
                }
            }
        }
    }
解决了,我用路径来判读深度
kosora曹 2013-04-26
  • 打赏
  • 举报
回复

package tm.cao.first;

import java.io.File;


public class VisitFile {
public static void main(String[] args) {
File f=new File("D:\\Program Files\\Genuitec\\Workspaces\\MyEclipse 10\\FirstServletProject");
preOrder(f, 1);
}

/**先序遍历
*如果是文件,遍历自身
*如果是文件夹:遍历自身
* 遍历它的子文件夹 level+1
*/
public static void preOrder(File file,int level){
if(file!=null){
String str=generateStr(level);
if(!file.isDirectory()){
visit(str, file);
}else{
visit(str, file);
File[] childs=file.listFiles();
for(File child:childs){
preOrder(child, level+1);
}
}
}
}

/**
* 输出一个文件
*/
public static void visit(String str,File file){
System.out.println(str+file.getName());
}

/**
根据层数拼串
*/
public static String generateStr(int level){
StringBuffer sb=new StringBuffer();
for(int i=1;i<=level;i++){
sb.append("----");
}
return sb.toString();
}
}


目录结构:

结果:
cooc2000 2013-04-26
  • 打赏
  • 举报
回复
引用 2 楼 AA5279AA 的回复:
全局变量应该不合适。 建议传参,递归的方式里面传入一个参数变量,递归一次就+1,这样就更深入一层,判断条件,达到指定的层数开始执行相应的操作。
我现在就是这么做的,这样得到的深度是总深度 我要得到的是每个父目录的深度 #1楼的 a c目录的深度

        File list[] = c.files("P:\\zip\\");
        if (list == null || list.length <= 0) {
            return;
        }
        DefaultMutableTreeNode root = new DefaultMutableTreeNode("目录列表");
        addNode(root, list, 0);
    private void addNode(DefaultMutableTreeNode root, File list[], int depth) {
        if (list == null || list.length <= 0) {
            return;
        }
        for (File file : list) {
            if (file.isDirectory()) {
                DefaultMutableTreeNode node = new DefaultMutableTreeNode(file.getName());
                root.add(node);
                if (depth < 2) {
                   addNode(node, c.files(file.getAbsolutePath()), ++depth);
                }
            }
        }
    }
失落夏天 2013-04-26
  • 打赏
  • 举报
回复
全局变量应该不合适。 建议传参,递归的方式里面传入一个参数变量,递归一次就+1,这样就更深入一层,判断条件,达到指定的层数开始执行相应的操作。
MakeUrChois 2013-04-26
  • 打赏
  • 举报
回复
全局变量。 递归开始之前深度+1 递归结束之后深度-1 就应该能取到当前的深度了吧。。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧