Вы можете использовать File#isDirectory()
, чтобы проверить, является ли данный файл (путь) каталогом. Если это true
, вы снова вызываете тот же метод с его результатом File#listFiles()
.
public static void main(String... args) {
File[] files = new File("C:/").listFiles();
showFiles(files);
}
public static void showFiles(File[] files) {
for (File file : files) {
if (file.isDirectory()) {
System.out.println("Directory: " + file.getName());
showFiles(file.listFiles()); // Calls same method again.
} else {
System.out.println("File: " + file.getName());
}
}
}
Обратите внимание, что это чувствительно к StackOverflowError
.
], когда дерево глубже, чем может стека JVM. Вместо этого вы можете использовать итеративный подход или хвостовую рекурсию , но это другой предмет;)