/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ package net.sourceforge.pmd.util; import java.io.File; import java.io.FilenameFilter; import java.util.ArrayList; import java.util.List; /** * A utility class for finding files within a directory. */ public class FileFinder { private FilenameFilter filter; private static final String FILE_SEP = System.getProperty("file.separator"); public List<File> findFilesFrom(File dir, FilenameFilter filter, boolean recurse) { this.filter = filter; List<File> files = new ArrayList<>(); scanDirectory(dir, files, recurse); return files; } /** * Implements a tail recursive file scanner */ private void scanDirectory(File dir, List<File> list, boolean recurse) { String[] candidates = dir.list(filter); if (candidates == null) { return; } for (int i = 0; i < candidates.length; i++) { File tmp = new File(dir + FILE_SEP + candidates[i]); if (tmp.isDirectory()) { if (recurse) { scanDirectory(tmp, list, true); } } else { list.add(new File(dir + FILE_SEP + candidates[i])); } } } }