How do I recursively list all files under a directory in Java? Does the framework provide any utility?
I saw a lot of hacky implementations. But none from the fra
My version (of course I could have used the built in walk in Java 8 ;-) ):
public static List findFilesIn(File rootDir, Predicate predicate) {
ArrayList collected = new ArrayList<>();
walk(rootDir, predicate, collected);
return collected;
}
private static void walk(File dir, Predicate filterFunction, List collected) {
Stream.of(listOnlyWhenDirectory(dir))
.forEach(file -> walk(file, filterFunction, addAndReturn(collected, file, filterFunction)));
}
private static File[] listOnlyWhenDirectory(File dir) {
return dir.isDirectory() ? dir.listFiles() : new File[]{};
}
private static List addAndReturn(List files, File toAdd, Predicate filterFunction) {
if (filterFunction.test(toAdd)) {
files.add(toAdd);
}
return files;
}