【问题标题】:How to create folders and subfolders with average depth如何创建具有平均深度的文件夹和子文件夹
【发布时间】:2020-09-11 23:33:33
【问题描述】:

我有一个类可以在其中创建一个根文件夹“foo”和子文件夹:

public class FolderCreator {

    public static boolean createDirectoriesWithCommonParent(File parent, String...subs) {

        parent.mkdirs();
        if (!parent.exists() || !parent.isDirectory()) {
            return false;
        }

        for (String sub : subs) {
            File subFile = new File(parent, sub);
            subFile.mkdir();
            if (!subFile.exists() || !subFile.isDirectory()) {
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        createDirectoriesWithCommonParent(new File("test/foo"), "a", "b", "c");
    }
}

我设置了数字 SUBFOLDERS_COUNT,我希望创建文件夹和子文件夹平均深度 = SUBFOLDERS_COUNT/3

如何创建具有给定平均深度的文件夹和子文件夹?

【问题讨论】:

  • 这个平均计数对于这个例子意味着什么?是否要直接在test/foo 中创建"test/foo/a/b/c" 而不是全部abc?如何处理可能的第四个子目录? (int) 平均值仍为 1,是否再次在根目录中创建该平均值?
  • 子文件夹“a”、“b”、“c”只是一个例子。这就是我需要的: - 我设置了 SUBFOLDERS_COUNT = 9(例如) - 在“foo”目录中创建了三个文件夹(深度 SUBFOLDERS_COUNT / 3)(例如,“a”、“b”、“c”) -在这三个子文件夹中的每一个中,我需要创建另一个平均深度 = 3 的文件夹。例如,在文件夹“a”中将有一个子文件夹,在文件夹“b”中将在文件夹“c”中创建三个子文件夹会有两个子文件夹。它们的总平均深度为三。你关于第四个子目录的问题我不明白:(
  • 你在哪里设置这个SUBFOLDERS_COUNT?我在示例代码中看不到它...
  • 代码示例中没有这个,因为我不知道怎么做。我可以设置文件夹的名称和数量,并将其作为参数传递给我的方法createDirectoriesWithCommonParent。但我不知道如何实现以平均深度创建文件夹。这是我的问题

标签: java directory subdirectory


【解决方案1】:

我发现了我的问题! 为了解决这个任务,下面的算法是合适的:

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class FolderCreator {
    private static final int SUBFOLDERS_COUNT = 9;
    private static final String BASE_PATH = "test/foo";

    public static void main(String[] args) {
        List<String> subFolders = createSubFolders(SUBFOLDERS_COUNT, SUBFOLDERS_COUNT/3);
        for (String subFolder : subFolders) {
            System.out.println(subFolder);
        }
    }

    private static List<String> createSubFolders(int subFoldersCount, int firstLevelFoldersCount) {
        List<String> paths = new ArrayList<>();
        while (firstLevelFoldersCount != 0) {
            String folderName = BASE_PATH;
            Random random = new Random();
            int max = subFoldersCount - firstLevelFoldersCount + 1;
            int depth = firstLevelFoldersCount == 1 ? subFoldersCount : 1 + random.nextInt(max);
            firstLevelFoldersCount--;
            subFoldersCount -= depth;
            for (int i = 0; i < depth; i++) {
                int layerNumber = i + 1;
                int sequenceNumber = 0;
                folderName = folderName + "\\" + layerNumber + "st" + "LayerSubFolder" + sequenceNumber;
                while (paths.contains(folderName)) {
                    sequenceNumber++;
                    folderName = folderName.substring(0, folderName.length() - 1) + sequenceNumber;
                }
                paths.add(folderName);
                File file = new File(folderName);
                file.mkdirs();
            }
        }
        return paths;
    }
}

文件夹结构如图所示:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 2020-07-18
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 2015-06-07
    相关资源
    最近更新 更多