список всех файлов из каталогов и подкаталогов в Java

Каким будет самый быстрый способ перечислить имена файлов из более 1000 каталогов и подкаталогов?

РЕДАКТИРОВАТЬ; Текущий код, который я использую:

import java.io.File; public class DirectoryReader { static int spc_count=-1; static void Process(File aFile) { spc_count++; String spcs = ""; for (int i = 0; i < spc_count; i++) spcs += " "; if(aFile.isFile()) System.out.println(spcs + "[FILE] " + aFile.getName()); else if (aFile.isDirectory()) { System.out.println(spcs + "[DIR] " + aFile.getName()); File[] listOfFiles = aFile.listFiles(); if(listOfFiles!=null) { for (int i = 0; i < listOfFiles.length; i++) Process(listOfFiles[i]); } else { System.out.println(spcs + " [ACCESS DENIED]"); } } spc_count--; } public static void main(String[] args) { String nam = "D:/"; File aFile = new File(nam); Process(aFile); } } 

Это выглядит нормально (рекурсивно проходит через каталог). Узким местом будет весь файл, который вам нужно сделать, и оптимизация вашей Java не покажет никаких реальных улучшений.

Поскольку этот ответ появляется поверх google, я добавляю решение java 7 nio для enums всех файлов и каталогов, на мою систему требуется примерно на 80% меньше времени.

 try { Path startPath = Paths.get("c:/"); Files.walkFileTree(startPath, new SimpleFileVisitor() { @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) { System.out.println("Dir: " + dir.toString()); return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { System.out.println("File: " + file.toString()); return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFileFailed(Path file, IOException e) { return FileVisitResult.CONTINUE; } }); } catch (IOException e) { e.printStackTrace(); } 

Единственное улучшение – избавиться от static spc_count и передать строку spcs в качестве параметра Process.

 public static void main(String[] args) { String nam = "D:/"; File aFile = new File(nam); Process("", aFile); } 

И при выполнении рекурсивного вызова

 static void Process( String spcs, File aFile) { ... Process(spcs + " ", listOfFiles[i]); ... } 

Таким способом вы можете вызвать этот метод из более чем 1 streamа.

Пока Java 7 не представит новые classы java.nio.file (например, DirectoryStream ), я боюсь, что у вас уже есть самые быстрые.

Если вы открыты для использования сторонней библиотеки, проверьте javaxt-core . Он включает многопоточный рекурсивный поиск каталогов, который должен быть быстрее, чем повторение через один каталог за раз. Здесь есть несколько примеров:

http://www.javaxt.com/javaxt-core/io/Directory/Recursive_Directory_Search

Я написал гораздо более простой код … Попробуйте это … Он покажет каждую папку, вложенные папки и файлы …

  int Files=0,Directory=0,HiddenFiles=0,HiddenDirectory=0; public void listf(String directoryName){ File file=new File(directoryName); File[] fileList=file.listFiles(); if(fileList!=null){ for(int i=0;i 
  • Подсчет количества файлов в каталоге с помощью Java
  • Java - поиск файлов в каталоге
  • В чем разница между каталогом и схемой в реляционной базе данных?
  • Вычисление размера каталога с помощью Python?
  • Maven - как включить пустые каталоги
  • Как удалить всю папку и содержимое?
  • Слушатель каталогов в Java
  • Directory.Move не работает (файл уже существует)
  • Как создать каталог на Java?
  • Получить каталог приложений
  • Как получить список файлов в каталоге на C ++?
  • Interesting Posts

    ошибка компоновщика при связывании учебника будильника буфера (неопределенные ссылки)

    Использование удаленного рабочего стола для подключения к другим компьютерам за одним IP-адресом

    Добавить локальное уведомление в ios10 – быстрый 3

    Что делает функция cvWaitKey () OpenCV?

    Изменить и продолжить: «Изменения не допускаются, когда …»

    Как я могу получить столбец Bootstrap для размещения нескольких строк?

    Уникальные поля, допускающие нули в Django

    Работа с несколькими графиками в TensorFlow

    Как легко и непрерывно контролировать температуру процессора, используя только «датчики» (без виджета gui)?

    Как я могу освободить указатель мыши с помощью мыши в OS X?

    Как добавить тень и границу на круговом образе viewView?

    Поворот видео с помощью FFmpeg

    Статическая членная переменная C ++ и ее инициализация

    В чем разница между instanceof и Class.isAssignableFrom (…)?

    Как я могу поддерживать ModelState с RedirectToAction?

    Давайте будем гением компьютера.