Использование стека для создания дерева файлов / каталогов в Java - PullRequest
0 голосов
/ 16 октября 2018

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

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 Ответ

0 голосов
/ 16 октября 2018

Я использовал переменные 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;
            } 
        }
    }
...