2017-02-13 2 views
1

У меня был каталог, содержащий 1 миллион текстовых файлов. Я хотел перечислить все имена файлов. Я попытался использовать File.listFiles() и распечатать имена файлов в консоли. Но прежде, чем начать печатать первое имя файла, потребовалось очень много времени. Есть ли более быстрый способ перечислить эти имена файлов?Java Чтение файлов из большого каталога

+0

Вы пробовали использовать метод list()? он возвращает только имена файлов, а не целые файлы. – mlg

+0

Да, 'list()' может помочь в этом случае. Но если бы моя папка была намного больше, например, 10 миллионов, это все равно было бы проблемой. – leanhvi

ответ

1

С listFiles() загружает результат в вашу память, не будет никакого способа ускорить процесс с помощью этого метода.

Но вы можете использовать Java DirectoryStream для предварительной загрузки содержимого в память и загрузки каждого имени файла. См. Это link

Path folder = Paths.get("..."); 
    try (DirectoryStream<Path> stream = Files.newDirectoryStream(folder)) { 
    for (Path entry : stream) { 
     // Process the entry 
    } 
    } catch (IOException ex) { 
    // An I/O problem has occurred 
    } 
+0

Прежде всего, спасибо за эту полезную информацию. Теперь я блуждаю, если я могу использовать этот «DirectoryStream» параллельно. Я имею в виду, есть ли способ поиска потока? – leanhvi

+0

Здесь [как конвертировать] (http://stackoverflow.com/questions/23932061/convert-iterable-to-stream-using-java-8-jdk/23936723) '' 'DirectoryStream''' в' '' 'Stream''', чтобы ускорить параллелизм. – Michael

Смежные вопросы