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