PHpullh
학습 라이브러리/Kotlin/디렉토리 탐색 (Directory Traversal)

KOTLIN · 파일/IO

디렉토리 탐색 (Directory Traversal)

File.walk()Path API로 디렉토리 트리를 효율적으로 탐색합니다.

파일/IO중급directorywalkfile-traversalnio-path

핵심 설명

File.walk()Path API로 디렉토리 트리를 효율적으로 탐색합니다.

Kotlin code

import java.io.File
import java.nio.file.*

fun main() {
    val dir = File(".")

    // walk: 재귀적 탐색
    println("=== .kt 파일 ===")
    dir.walk()
        .filter { it.isFile && it.extension == "kt" }
        .take(5)
        .forEach { println("  ${it.path} (${it.length()} bytes)") }

    // walkTopDown: 방향 지정 + 필터
    println("
=== 디렉토리 구조 ===")
    dir.walkTopDown()
        .maxDepth(2)
        .onEnter { !it.name.startsWith(".") }  // 숨김 폴더 제외
        .filter { it.isDirectory }
        .take(10)
        .forEach { println("  ${it.path}") }

    // NIO Path API
    println("
=== NIO 탐색 ===")
    val path = Paths.get(".")
    Files.walk(path, 2)
        .filter { Files.isRegularFile(it) }
        .limit(5)
        .forEach { println("  $it (${Files.size(it)} bytes)") }

    // 파일 정보
    dir.listFiles()?.filter { it.isFile }?.take(3)?.forEach { f ->
        println("${f.name}: ${f.lastModified()}")
    }
}

학습 팁

onEnter 콜백에서 false를 반환하면 해당 디렉토리 하위를 건너뜁니다. node_modules 등을 제외할 때 유용합니다.

주의할 점

walk()은 심볼릭 링크의 순환 참조를 감지하지 못할 수 있습니다. maxDepth를 설정하여 무한 탐색을 방지하세요.

자주 묻는 질문

디렉토리 탐색 (Directory Traversal)란 무엇인가요?

File.walk() 과 Path API로 디렉토리 트리를 효율적으로 탐색합니다.

디렉토리 탐색 (Directory Traversal) 학습 시 주의할 점은 무엇인가요?

walk() 은 심볼릭 링크의 순환 참조를 감지하지 못할 수 있습니다. maxDepth 를 설정하여 무한 탐색을 방지하세요.