递归遍历目录 深度问题
目录结构 例如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,这样就更深入一层,判断条件,达到指定的层数开始执行相应的操作。 --------------------编程问答--------------------
我现在就是这么做的,这样得到的深度是总深度
我要得到的是每个父目录的深度 #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