"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Java의 디렉토리 트리를 어떻게 반복 할 수 있습니까?

Java의 디렉토리 트리를 어떻게 반복 할 수 있습니까?

2025-02-06에 게시되었습니다
검색:488

How Can I Iterate Through a Directory Tree in Java?

Java의 디렉토리 트리를 통해 반복

지정된 디렉토리. 여기에는 전체 디렉토리 트리에 대한 포괄적 인 액세스를 제공하는 하위 디렉터가 포함됩니다. Java에는이 기능을 달성하기위한 표준 접근법이 있습니다.

파일#isdirectory () :

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());
            }
        }
    }
}

디렉토리 트리를 통해 반복하는 간단한 접근 방식은 재귀를 사용하는 것입니다. 다음 스 니펫은이 방법을 보여줍니다.

import java.io.file; 공개 클래스 DirectoryIterator { public static void main (String [] args) { 파일 디렉토리 = 새 파일 ( "/path/to/dir"); showfiles (directory.listfiles ()); } public static void showfiles (file [] files) { for (파일 파일 : 파일) { if (file.isdirectory ()) { System.out.println ( "디렉토리 :"file.getabsolutepath ()); showfiles (file.listfiles ()); // 재귀 호출 } 또 다른 { System.out.println ( "파일 :"file.getabsolutepath ()); } } } } 이 접근법은 ListFiles ()에서 반환 한 파일 목록에서 ShowFiles ()를 재귀 적으로 호출하여 작동합니다. 그러나 Directory 트리가 JVM의 스택을 처리하기에는 너무 깊이있는 경우 Stackoverflowerror 예외를 처리하는 것이 중요합니다.

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class DirectoryIteratorWithJava8 {

    public static void main(String[] args) throws Exception {
        Path directory = Paths.get("/path/to/dir");
        Files.walk(directory).forEach(path -> showFile(path.toFile()));
    }

    public static void showFile(File file) {
        if (file.isDirectory()) {
            System.out.println("Directory: "   file.getAbsolutePath());
        } else {
            System.out.println("File: "   file.getAbsolutePath());
        }
    }
}

How Can I Iterate Through a Directory Tree in Java?

]

Java 8 이상의 경우 더 효율적인 접근 방식은 파일#walk ()를 사용하는 것입니다. 이 방법은 JVM 스택 대신 메소드 호출 스택의 반복 상태를 유지함으로써 Stackoverflowerror 문제를 피하는 꼬리 재귀를 구현합니다. java.nio.file.path 가져 오기; java.nio.file.paths import; 공개 클래스 DirectoryIteratorwithjava8 { public static void main (string [] args)은 예외 { Path Directory = paths.get ( "/path/to/dir"); files.walk (directory) .foreach (path-> showfile (path.tofile ())); } public static void showfile (파일 파일) { if (file.isdirectory ()) { System.out.println ( "디렉토리 :"file.getabsolutepath ()); } 또 다른 { System.out.println ( "파일 :"file.getabsolutepath ()); } } } files#walk () 주어진 디렉토리 트리의 파일 및 디렉토리를 나타내는 경로 개체 스트림을 생성합니다. 그런 다음 foreach () 메소드는 각 경로 개체를 처리하고 해당 파일 또는 디렉토리를 표시하는 데 사용됩니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3