当前位置:编程学习 > JAVA >>

递归遍历目录 深度问题

目录结构 例如
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/

递归的时候怎么得到深度呢 --------------------编程问答-------------------- 全局变量。

递归开始之前深度+1
递归结束之后深度-1

就应该能取到当前的深度了吧。。 --------------------编程问答-------------------- 全局变量应该不合适。
建议传参,递归的方式里面传入一个参数变量,递归一次就+1,这样就更深入一层,判断条件,达到指定的层数开始执行相应的操作。 --------------------编程问答--------------------
引用 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);
                }
            }
        }
    }
--------------------编程问答--------------------

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();
}
}


目录结构:

结果:
--------------------编程问答--------------------

    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()));
                }
            }
        }
    }


解决了,我用路径来判读深度
补充:Java ,  Java SE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,