簡體   English   中英

使用堆棧在Java中制作文件/目錄樹

[英]Using stack to make file/directory tree in 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());
    }
}

此代碼打印文件夾和文件,但沒有縮進,向后且順序不正確。

有人可以解釋它應該如何工作的邏輯嗎?

編輯:找到了使用遞歸和堆棧的解決方案(盡管堆棧似乎是不必要的)

在通過文件目錄遞歸遍歷時,我使用了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;
            } 
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM