Recursively list files in Java

后端 未结 27 2042
走了就别回头了
走了就别回头了 2020-11-22 00:29

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

27条回答
  •  滥情空心
    2020-11-22 01:00

    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;
        }
    

提交回复
热议问题