关谷神奇 发表于 2021-4-12 22:08

【请教】使用递归的创建多层文件夹

请教,按照以下代码我可以创建2层的文件夹,第一层文件名称为0-9,0-9的每一个文件夹中又是0-9,这是第二层,如果我想创建多层文件使用递归可否实现?
```java
```java
public class Test5 {
    public static void main(String[]args){
      File file = new File("f:/test");
      Test5 test5 = new Test5();
      test5.fun(file);
    }
    void fun(File file){
      for (int i = 0; i < 10; i++) {
            File file1 = new File(file, "" + i);
            file1.mkdir();
            for (int j = 0; j < 10; j++) {
                File file2 = new File(file1,""+j);
                file2.mkdir();
            }
      }

    }
}
```

涛之雨 发表于 2021-4-13 23:35

关谷神奇 发表于 2021-4-13 23:21
大佬,deep--是死循环,改为--deep之后和想象的不太一样;只能执行完0这一层;

改成deep-1试试?

侃遍天下无二人 发表于 2021-4-14 00:01

关谷神奇 发表于 2021-4-13 23:14
可否有程序实现

类似的东西我似乎写过很多,生成目录索引的时候经常用到,算是家常便饭了
下面代码应该能递归创建3层目录,我直接打的,没调试,你自己看看有没有问题

public class Test5 {
    public static void main(String[]args){
      String path = "f:/test";
      Test5 test5 = new Test5();
      test5.fun(path,3);
    }
    void fun(String path,int level){
      if(level<=0) return;
      for (int i = 0; i < 10; i++) {
            String dir_path = path + "/" + i;
            File file = new File(dir_path);
            file.mkdir();
            fun(dir_path,level-1);
      }
    }
}

侃遍天下无二人 发表于 2021-4-12 22:48

可以,在函数里传入当前目录即可

涛之雨 发表于 2021-4-12 23:28

本帖最后由 涛之雨 于 2021-4-13 23:34 编辑

递归的时候就是调用自己,这种应该两个参数就差不多了,
一个参数是当前目录,一个参数控制递归的层数

```java
/**
file:当前文件夹
deep:深度,控制层数
*/
void fun(File file, int deep){
      if(deep<=0)return;
    for (int i = 0; i < 10; i++) {
      File file = new File(file, "" + i);
      file.mkdir();
      fun(file, deep-1);
    }
}
```
java不是很熟,不过应该差不多长这样,如果是递归三层就把那个`if(deep>2)return;`改成`if(deep>3)return;`


根据五楼的建议,改为递减,至于四楼Java比较深入的内容就不是很了解了。

侃遍天下无二人 发表于 2021-4-12 23:49

涛之雨 发表于 2021-4-12 23:28
递归的时候就是调用自己,这种应该两个参数就差不多了,
一个参数是当前目录,一个参数控制递归的层数


new File(String filename);
Java是纯面向对象语言,很少出现修改传入参数的情况

dunxp 发表于 2021-4-13 00:49

涛之雨 发表于 2021-4-12 23:28
递归的时候就是调用自己,这种应该两个参数就差不多了,
一个参数是当前目录,一个参数控制递归的层数


层数用自减比较好,这样可以满足多个地方都调用该函数且层数要求不一样的情况

asaSKTY 发表于 2021-4-13 07:32

int fileDirNumber = 9;

void test(){
   File file = new File();
   mkCatalog(fileDirNumber,file);
   
}
void mkCatalog(int badge,File file){
      if(badge<0)return;
      File file1 = new File(file, "" + badge);
      file1.mkdir();
      mkCatalog(file1,fileDirNumber);
      mkCatalog(badge-1,file);
    }

    void mkCatalog(File file,int badge){
      if(badge<0) return;
      File file2 = new File(file,""+badge);
      file2.mkdir();
      mkCatalog(file,badge-1);
    }

asaSKTY 发表于 2021-4-13 07:38

本帖最后由 asaSKTY 于 2021-4-13 07:39 编辑

涛之雨 发表于 2021-4-12 23:28
递归的时候就是调用自己,这种应该两个参数就差不多了,
一个参数是当前目录,一个参数控制递归的层数

{:301_1002:}

b0y 发表于 2021-4-13 08:25

也可以直接用api创建多级目录

关谷神奇 发表于 2021-4-13 23:14

侃遍天下无二人 发表于 2021-4-12 22:48
可以,在函数里传入当前目录即可

可否有程序实现

关谷神奇 发表于 2021-4-13 23:21

涛之雨 发表于 2021-4-12 23:28
递归的时候就是调用自己,这种应该两个参数就差不多了,
一个参数是当前目录,一个参数控制递归的层数


大佬,deep--是死循环,改为--deep之后和想象的不太一样;只能执行完0这一层;
页: [1] 2
查看完整版本: 【请教】使用递归的创建多层文件夹