我需要使用堆栈数据结构返回或打印文件/目录树。例如:
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());
}
}
此代码打印文件夹和文件,但没有缩进,向后且顺序不正确。
有人可以解释它应该如何工作的逻辑吗?
编辑:找到了使用递归和堆栈的解决方案(尽管似乎不需要堆栈)
答案 0 :(得分:0)
我使用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;
}
}
}