我有一个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中,按名称排序,然后使用某种哈希方法按名称查找名称?
需要帮助...