«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу перевернуть через дерево каталогов в Яве?

Как я могу перевернуть через дерево каталогов в Яве?

Опубликовано в 2025-02-06
Просматривать:674

How Can I Iterate Through a Directory Tree in Java?

итерация через дерево каталогов в 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