gpt4 book ai didi

java - 以更快的方式查找具有子目录的目录中的文件列表

转载 作者:行者123 更新时间:2023-12-01 09:33:02 24 4
gpt4 key购买 nike

有一个文件列表(数量为 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);
}

}

最佳答案

正如评论中已经提到的,扭转这个过程:

  1. 将列表中的文件名放入哈希集中
  2. 递归地遍历目录结构一次,同时从哈希集中删除所有找到的文件
  3. 哈希集现在仅包含丢失的文件。

这应该与您现在测试一个文件所需的时间大致相同(如果我们不考虑磁盘缓存)。因此加速几乎是 27000 倍。

关于java - 以更快的方式查找具有子目录的目录中的文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39240602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com