Самый быстрый способ найти список файлов в огромном дереве каталогов WindowsJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Самый быстрый способ найти список файлов в огромном дереве каталогов Windows

Сообщение Anonymous »

У меня есть дерево каталогов 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
 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
}

}

Пока все эти варианты работают очень медленно.
Как я предполагаю, хотя все файлы находятся в одном логическом месте, на самом деле каждый файл сохранено в другом месте на жестком диске, поэтому все эти вызовы ввода-вывода занимают слишком много времени.

Еще одна идея, которую я нашел здесь, — это интерфейс ISearchFolderItemFactory, но документацию по нему я нашел только на C++, а не на Java.

Может быть, я смогу реализовать предварительную сортировку или что-то в этом роде, чтобы собрать все файлы вместе на HD, отсортировав их по имени, а затем использовать какой-нибудь хеш-метод для поиска имя в имя?

Нужна помощь...

Подробнее здесь: https://stackoverflow.com/questions/560 ... ctory-tree
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»