有一个文件列表(数量为27000)。目标是在目录结构(具有多级子目录)中搜索这些文件中的每一个并打印丢失的文件。我有使用递归函数的代码来搜索文件的存在。代码似乎是有效的,但是当要搜索的文件数量非常高时,对于这种特定情况来说速度非常慢。无论如何都有提高此代码的性能。
代码段如下:
public static boolean walk(String path, String fileName) throws Exception {
File root = new File(path);
File[] list = root.listFiles();
if (list == null)
return false;
for (File f : list) {
if (f.isDirectory()) {
walk(f.getAbsolutePath(), fileName);
} else {
if (f.getAbsoluteFile().getName().equalsIgnoreCase(fileName)) {
presentFiles.add(f.getAbsoluteFile().getName());
throw new Exception("hi");
}
}
}
return false;
}
public static void main(String[] args) {
int i = 0;
for (String fileName : attrSet) {//attrSet is HashSet of all the files which are being searched.
try{
boolean isFileFound = walk(source, fileName);
}
catch(Exception e) {
System.out.println(e.getMessage() + i++);
}
}
attrSet.removeAll(presentFiles); //presentFiles is HashSet of all files present in the directory
for (String fileNm : attrSet) {
System.out.println("FileName : " + fileNm);
}
}
答案 0 :(得分:1)
正如评论中已经提到的那样,转过程:
现在测试一个文件所需的时间大致相同(如果我们不考虑磁盘缓存)。因此,加速几乎是27000的因素。