使用堆栈在Java中制作文件/目录树

时间:2018-10-16 10:36:40

标签: java algorithm tree stack filetree

我需要使用堆栈数据结构返回或打印文件/目录树。例如:

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 :(得分:0)

我使用indenttemp变量来递归遍历文件目录时保持缩进。然后在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;
            } 
        }
    }