Просто чтобы расширить принятый ответ, я сохраняю имена файлов в ArrayList (вместо того, чтобы просто выгружать их в System.out.println), я создал вспомогательный класс «MyFileUtils», чтобы он мог быть импортирован другими проектами:
class MyFileUtils {
public static void loadFilesForFolder(final File folder, List<String> fileList){
for (final File fileEntry : folder.listFiles()) {
if (fileEntry.isDirectory()) {
loadFilesForFolder(fileEntry, fileList);
} else {
fileList.add( fileEntry.getParent() + File.separator + fileEntry.getName() );
}
}
}
}
Я добавил полный путь к имени файла.
Вы бы использовали это так:
import MyFileUtils;
List<String> fileList = new ArrayList<String>();
final File folder = new File("/home/you/Desktop");
MyFileUtils.loadFilesForFolder(folder, fileList);
// Dump file list values
for (String fileName : fileList){
System.out.println(fileName);
}
ArrayList передается по «значению», но значение используется для указания на тот же объект ArrayList, который находится в куче JVM. Таким образом, каждый рекурсивный вызов добавляет имена файлов в один и тот же ArrayList (мы НЕ создаем новый ArrayList для каждого рекурсивного вызова).