Использование стека для создания дерева файлов / каталогов в 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());
}
}
Этот код печатает папки и файлы, но без отступа, в обратном направлении и не совсем в правильном порядке.
Может ли кто-нибудь объяснить логику того, как это должно работать?
РЕДАКТИРОВАТЬ: нашел решение с использованием рекурсии и стека (хотя стек кажется ненужным)
1 ответ
Я использовал 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;
}
}
}