1 /***
2 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3 */
4 package net.sourceforge.pmd.cpd;
5
6 import java.io.File;
7 import java.io.FilenameFilter;
8 import java.util.ArrayList;
9 import java.util.List;
10
11 public class FileFinder {
12
13 private FilenameFilter filter;
14 private static final String FILE_SEP = System.getProperty("file.separator");
15
16 public List findFilesFrom(String dir, FilenameFilter filter, boolean recurse) {
17 this.filter = filter;
18 List files = new ArrayList();
19 scanDirectory(new File(dir), files, recurse);
20 return files;
21 }
22
23 /***
24 * Implements a tail recursive file scanner
25 */
26 private void scanDirectory(File dir, List list, boolean recurse) {
27 String[] candidates = dir.list(filter);
28 for (int i = 0; i < candidates.length; i++) {
29 File tmp = new File(dir + FILE_SEP + candidates[i]);
30 if (tmp.isDirectory()) {
31 if (recurse) {
32 scanDirectory(tmp, list, true);
33 }
34 } else {
35 list.add(new File(dir + FILE_SEP + candidates[i]));
36 }
37 }
38 }
39 }