Tenho um ambiente windows e estou fazendo uma busca numa pasta que tem mais de 50.000 arquivos, quando eu tento fazer o filtro ou passando um FilenameFilter ou na mão, não me retorna nem 10% dos arquivos.
PS.: Estou num ambiente windows.
Segue uma classe de teste que fiz:
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.List;
public class FindDocSigs {
public static void list(String[] args) {
File root = new File(args[0]);
File[] files = root.listFiles();
List<File> matchedFiles = new ArrayList<File>();
if (files != null) {
if (files.length == 0) {
System.out.println("No files in the folder.");
} else {
String docPattern = ".*\.doc";
System.out.println("Files in the folder: "+files.length);
System.out.println(root.getAbsolutePath());
for (int i = 0; i < files.length; i++) {
if (files[i].getName().matches(docPattern)) {
matchedFiles.add(files[i]);
}
}
}
}
System.out.println("Files found: "+matchedFiles.size());
}
public static void listFilter(String[] args) {
File[] files = new File(args[0]).listFiles(new DocFilenameFilter ());
if (files != null) {
if (files.length == 0) {
System.out.println("No files matched the pattern.");
} else {
for (int i = 0; i < files.length; i++) {
System.out.println(files[i].getName());
}
}
} else {
System.out.println("No files found.");
}
}
private static class DocFilenameFilter implements FilenameFilter {
private String docPattern = null;
DocFilenameFilter() {
docPattern = ".*\.doc";
}
public boolean accept(File dir, String name) {
System.out.println(name+": "+name.matches(docPattern));
return name.matches(docPattern);
}
}
}