【问题标题】:how do you create a directory that has 3 other directorys in it and so on你如何创建一个包含 3 个其他目录的目录等等
【发布时间】:2021-09-13 19:03:18
【问题描述】:

我试图在 java 中创建一种迷宫般的目录。一个目录中应该有 3 个其他目录,并且这些目录中也应该有 3 个目录,直到达到某个“深度级别”。我尝试了一些方法,但无法使其正常工作,它确实在一个文件夹中创建了 3 个文件夹,但不在其他文件夹中。

我的java代码:

 private static final int LEVELS = 5;
 private static final int FOLDERS_COUNT = 3;

 int currentLevel = 0;

 public void createFolder(String path) {
     //select random name from a list
     Random r = new Random(); 
     String newFolderName = nameList[r.nextInt(nameList.length)];
     
     //save the new path with the name
     String completePath = path+"/"+newFolderName;
     
     //create folder
     new File(path+"/"+newFolderName).mkdirs();
     
     //increase the deepness level
     currentLevel++;
     
     if(currentLevel <= LEVELS) {
         for(int i = 0; i < FOLDERS_COUNT; i++) // do it again 3 times
             createFolder(completePath);
     }
 }  

如果我忘记提及重要的事情,我表达自己有点困难,请提醒我,我会添加它。

【问题讨论】:

  • 如果您使用 if(currentLevel
  • completePath 可以用在立即语句中
  • 一个问题是使用Random 可能会引入路径冲突,从而减少创建的目录数量。同样mkdirs 返回一个boolean 表示成功 - 可能应该检查一下。
  • currentLevel 需要是传递给createFolder 的参数,而不是全局变量。

标签: java file directory


【解决方案1】:

如果达到最高级别return 停止递归:

 if(currentLevel > LEVELS + 1) {
    return;
 }

否则创建一个文件夹。文件夹名称是级别+索引,而不是列表中的随机名称,以避免由于相同的文件夹名称而被覆盖:

else if (currentLevel++ > 1){
    String newFolderName = "level" + (currentLevel - 2) + "_folder" + folderIndex;
    path = path + "/" + newFolderName;
    new File(path).mkdirs();
}

最后递归调用createFolders

for(int i = 1; i <= FOLDERS_COUNT; i++)
   createFolders(i, currentLevel, path);
 }

完整代码:

private static final int LEVELS = 5;
private static final int FOLDERS_COUNT = 3;
    
public static void main(String[] args) {
     createFolders(1, 1 , "C:/parentFolder");
}
    
public static void createFolders(int folderIndex, int currentLevel, String path) {
      if(currentLevel > LEVELS + 1) {
        return;
      }else if (currentLevel++ > 1){
        String newFolderName = "level" + (currentLevel - 2) + "_folder" + folderIndex;
        path = path + "/" + newFolderName;
        new File(path).mkdirs();
      }

      for(int i = 1; i <= FOLDERS_COUNT; i++)
         createFolders(i, currentLevel, path);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-27
    • 2017-11-13
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 2019-08-13
    相关资源
    最近更新 更多