итерация через дерево каталогов в Java
Одна из общих задач при работе с каталогами - это обращаться через все файлы и каталоги внутри внутри указанный каталог. Это включает в себя подкатарии, обеспечивая комплексный доступ ко всему дереву каталогов. В Java существуют стандартные подходы для достижения этой функции.
file#isdirectory ():
класс файла в Java имеет метод, называемый isDirectory (), который может использоваться для определения того, представляет ли файл каталог или файл. Если заданный файл является каталогом, то он содержит список файлов и каталогов, которые можно получить с помощью метода ListFiles ().
рекурсивный подход с файлами#listfiles (): ]
простой подход к итерации через дерево каталогов - это использование рекурсии. Следующий фрагмент демонстрирует этот метод:
import java.io.File; public class DirectoryIterator { public static void main(String[] args) { File directory = new File("/path/to/dir"); showFiles(directory.listFiles()); } public static void showFiles(File[] files) { for (File file : files) { if (file.isDirectory()) { System.out.println("Directory: " file.getAbsolutePath()); showFiles(file.listFiles()); // Recursive call } else { System.out.println("File: " file.getAbsolutePath()); } } } }
Этот подход работает путем повторного вызова showfiles () в списке файлов, возвращаемых ListFiles (). Тем не менее, важно обработать исключение StackoverFlowerRor, которое может произойти, если дерево каталогов слишком глубоко, чтобы стек JVM для обработки. ]
для Java 8, а позже более эффективным подходом является использование файлов#walk (). Этот метод реализует хвостовую рекурсию, которая позволяет избежать проблемы StackoverFlowerRor, сохраняя состояние итерации в стеке вызовов метода, а не в стеке JVM.импорт java.nio.file.files; Импорт java.nio.file.path; Импорт java.nio.file.paths; открытый класс DirectoryIteratorWithJava8 { public static void main (string [] args) бросает исключение { Path Directory = paths.get ("/path/to/dir"); Files.walk (каталог) .foreach (path -> showfile (path.tofile ())); } public static void showfile (файл файла) { if (file.isdirectory ()) { System.out.println ("Directory:" file.getAbsolutePath ()); } еще { System.out.println ("file:" file.getAbsolutePath ()); } } }
files#walk () генерирует поток объектов пути, представляющих файлы и каталоги в данном дереве каталогов. Метод foreach () затем используется для обработки каждого объекта пути и отображения соответствующего файла или каталога.Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3