Как создавать папки и подпапки со средней глубиной - PullRequest
0 голосов
/ 25 мая 2020

У меня есть класс, который создает root папку "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 .

Как я могу создавать папки и подпапки с заданной средней глубиной?

1 Ответ

0 голосов
/ 25 мая 2020

Я понял свою проблему! Для решения этой задачи подходит следующий алгоритм:

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

...