Использование стека для создания дерева файлов / каталогов в Java

Мне нужно вернуть или распечатать файл / каталог дерева, используя структуру данных стека. Например:

Folder1
    Folder1.1
        File1.1.1
    Folder1.2
Folder2
    File2.1
    File2.2
...

Мой код до сих пор:

public static void filetree(File mainfolder, int indent){

    Stack<String> filesanddirectories = new Stack<>();

        for (File file : mainfolder.listFiles()){
            if (file.isDirectory()){
                filesanddirectories.push(file.getName());
                filetree(file, 0);
            }
            else if (file.isFile()){
                filesanddirectories.push(file.getName());
            }
        }

    for (int i = 0; i < filesanddirectories.size(); i++){
        System.out.println(filesanddirectories.pop());
    }
}

Этот код печатает папки и файлы, но без отступа, в обратном направлении и не совсем в правильном порядке.

Может ли кто-нибудь объяснить логику того, как это должно работать?

РЕДАКТИРОВАТЬ: нашел решение с использованием рекурсии и стека (хотя стек кажется ненужным)

1 ответ

Я использовал indent а также temp переменные для сохранения отступа при рекурсивном обходе через каталог файлов. Затем печатается отступ в начале for петля.

public static void filetree(File mainfolder, int indent) {

        int temp;

        for (File file : mainfolder.listFiles()) {
            for(int i = 0; i<indent; i++) {
                System.out.print("  ");
            }
            temp = indent;
            if (file.isDirectory()) {

                indent++;
                System.out.println(file.getName()); 

                filetree(file, indent);
                indent--;

            } else if (file.isFile()) {

                System.out.println(file.getName());
                indent = temp;
            } 
        }
    }
Другие вопросы по тегам