java - 使用堆栈在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());
}
}
此代码打印文件夹和文件,但没有缩进,向后并且不完全按照正确的顺序。
有人可以解释它应该如何工作的逻辑吗?
编辑:找到使用递归和堆栈的解决方案(虽然堆栈似乎是不必要的)
解决方案
在递归遍历文件目录时,我使用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;
}
}
}
推荐阅读
- c++ - 友元注入在除 MSVC 之外的所有编译器上均失败
- java - setBackgroundColor 正在使 android 应用程序崩溃
- c++ - 无法将完整的数组值传递给 C++ 中的另一个函数
- excel - 想要从另一个工作簿中使用 SUMIF 带来匹配数据的值
- python - 将多个视图优化为一个视图 - Django
- android - 在 ViewPager2 中为 Fragments 共享 ViewModel 或为每个 Fragment 创建一个新的
- flutter - 如何修复小部件溢出圆形边框容器颤动
- python - 如何根据句子的上下文对同一实体进行分类?
- c++ - C++ 上不正确的工作 boost::geometry::union_
- python - How to extract a leading number from a string?