如何创建平均深度的文件夹和子文件夹?

问题描述 投票:0回答:1

我有一个类,可以创建一个根文件夹 "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_COUNT3.

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

java directory subdirectory
1个回答
0
投票

我想明白了我的问题!为了解决这个任务,下面的算法是合适的。

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

文件夹结构将如图所示,例如:

The folder structure will as shown in the picture for example

© www.soinside.com 2019 - 2024. All rights reserved.