Рекурсивно найти все текстовые файлы в каталоге
Я пытаюсь получить имена всех текстовых файлов в каталоге. Если в каталоге есть подкаталоги, я также хочу получить текстовые файлы в них. Я не уверен, как заставить процесс продолжаться для любого количества подкаталогов.
Прямо сейчас код ниже просто получает все текстовые файлы в текущем каталоге и и подкаталогах в каталоге. Для каждого найденного подкаталога он также находит любые текстовые файлы и более глубокие подкаталоги. Проблема в том, что если эти более глубокие подкаталоги имеют еще более глубокие подкаталоги, то я не могу найти все текстовые файлы. Кажется, это проблема, которая требует рекурсии, потому что я нене знаю, как глубоко это зайдет.
Вот мой код до сих пор:
File rootDirectory = new File(rootDir);
if (rootDirectory.isDirectory()) {
System.out.println("Valid directory");
File[] listOfFiles = rootDirectory.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
String iName = listOfFiles[i].getName();
if (listOfFiles[i].isFile()) {
if (iName.endsWith(".txt") || iName.endsWith(".TXT")) {
System.out.println("File: "+iName);
}
}
if (listOfFiles[i].isDirectory()) {
System.out.println("Directory: "+iName);
File[] subList = listOfFiles[i].listFiles();
for (int j = 0; j < subList.length; j++) {
String jName = subList[j].getName();
if (subList[j].isFile()) {
if (jName.endsWith(".txt") || jName.endsWith(".TXT")) {
System.out.println("\tFile: "+jName);
}
}
if (subList[j].isDirectory()) {
System.out.println("\tDirectory: "+jName);
}
}
}
}
}
else System.out.println("Invalid directory");
редактироватьРаботаю, спасибо Олаф Дитче
public void findFiles(File root, int depth) {
File[] listOfFiles = root.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
String iName = listOfFiles[i].getName();
if (listOfFiles[i].isFile()) {
if (iName.endsWith(".txt") || iName.endsWith(".TXT")) {
for (int j = 0; j < depth; j++) System.out.print("\t");
System.out.println("File: "+iName);
}
}
else if (listOfFiles[i].isDirectory()) {
for (int j = 0; j < depth; j++) System.out.print("\t");
System.out.println("Directory: "+iName);
findFiles(listOfFiles[i], depth+1);
}
}
}