вывести в консоль содержимое папок с отступами
Подскажите, пожалуйста, как исправить метод вывода содержимого папок в консоль так, что бы вывод выглядел как на картинке, т.е. лесенкой. Если в папке есть файлы, то вывод корректный. А если в папке лежит другая пустая папка, то выводит без отступа. Спасибо.
private static void doRecurs(File dir) {
if (dir.isDirectory()) {
File[] list = dir.listFiles();
if (list != null) {
for (File name : list) {
if (name.isFile()) {
System.out.println("\tFile - " + name.getName());
} else {
System.out.println("Directory - " + name.getName());
doRecurs(name);
}
}
}
} else System.out.println(dir.getName() + " не является папкой");
}
Ответы (2 шт):
Автор решения: gil9red
→ Ссылка
Нужно в doRecurs:
- Передавать уровень вложенности, увеличивая его при рекурсивном вызове на 1
- Генерировать строку-отступ, которая зависит от уровня вложенности
Пример:
...
static String repeat(int n, String value) {
return new String(new char[n]).replace("\0", value);
}
static void doRecurs(File dir, int level) {
final String indent = repeat(level, " ");
if (dir.isDirectory()) {
File[] list = dir.listFiles();
if (list == null)
return;
for (File name : list) {
if (name.isFile()) {
System.out.println(indent + "File - " + name.getName());
} else {
System.out.println(indent + "Directory - " + name.getName());
doRecurs(name, level + 1);
}
}
} else {
System.out.println(dir.getName() + " не является папкой");
}
}
public static void main(String[] args) throws Exception {
doRecurs(new File(<путь до папки>), 0);
}
Автор решения: JavaSash
→ Ссылка
Недавно решил такую же задачу так:
public class RecursionUtil {
private static StringBuilder tab = new StringBuilder("");
public static void pathOutput(String path) {
File[] catalog = new File(path).listFiles();
for (File file : Objects.requireNonNull(catalog)) {
System.out.print(tab.toString());
if (file.isFile()) {
System.out.println(file.getName());
} else if (file.isDirectory()) {
System.out.println(file.getName());
tab.append("\t");
pathOutput(path + File.separator + file.getName());
tab.delete(tab.length() - 1, tab.length());
}
}
}
}
