在巨大的Windows目录树中查找文件列表的最快方法

时间:2019-05-12 11:38:42

标签: java windows file-io

我有一个Windows目录树,其中包含约1,000,000个文件。 我有一个用Java阅读的文本文件,其中包含一些文件名(大约100,000个),我想检查每个文件名-目录中是否存在(如果是,请提供文件的完整路径)。

已经尝试过这些选项:

1。

File folder = new File("your/path");
File[] listOfFiles = folder.listFiles();

for (int i = 0; i < listOfFiles.length; i++) {
  if (listOfFiles[i].isFile()) {
    System.out.println("File " + listOfFiles[i].getName());
  } else if (listOfFiles[i].isDirectory()) {
    System.out.println("Directory " + listOfFiles[i].getName());
  }
}

2。

public void func(String path, String name)
{

    Path folder = Paths.get(path);
    try (DirectoryStream<Path> stream = Files.newDirectoryStream(folder))
    {
        for (Path entry : stream) 
        {
            if(Files.isDirectory(entry))
            {
                func(entry.toString(), name);
            }
            else
            {
                if(FilenameUtils.removeExtension(entry.getFileName().toString()).equals(name))
                {
                    System.out.println(entry);
                }
            }
        }
    } 
    catch (IOException ex) {
    // An I/O problem has occurred
    }

}

到目前为止,所有这些选项都很慢。 我猜,尽管所有文件都位于同一逻辑位置,但实际上每个文件都保存在硬盘驱动器的另一个位置,因此所有这些IO调用都花费太多时间。

我在这里找到的另一个想法是ISearchFolderItemFactory接口,但是我仅在C ++中找到了它的文档,而在Java中却找不到。

也许我可以实施预排序或类似的操作,以将所有文件真正放入hd中,按名称排序,然后使用某种哈希方法按名称查找名称?

需要帮助...

0 个答案:

没有答案