Kotlin - 디렉토리의 모든 파일 리스트 출력

File.walk(path)를 이용하여 어떤 디렉토리 하위의 모든 폴더 및 파일을 출력할 수 있습니다.

인자로 전달된 경로의 디렉토리를 재귀적으로 탐색하여, 하위의 모든 디렉토리 및 폴더를 탐색합니다.

탐색하는 파일들은 File 객체로 접근이 가능하기 때문에 File 클래스가 제공하는 API를 이용하여 파일을 처리할 수 있습니다.

예제를 통해 자세히 알아보겠습니다.

1. File.walk() : 재귀적으로 디렉토리의 파일 리스트 출력

예제에서는 다음 경로의 디렉토리를 탐색하고 파일 리스트를 출력할 것입니다.

~/tests/my_dir$ tree
.
├── a1.log
├── bb.log
├── t1.txt
├── t2.txt
├── test1
│   └── a1.log
├── test2
│   └── t3.txt
└── top.log

다음과 같이 File.walk()를 이용하여 특정 경로를 탐색하며 모든 파일들을 출력할 수 있습니다.

import java.io.File

fun main(args: Array<String>){

    File("/home/js/tests/my_dir").walk().forEach {
        println(it)
    }
}

Output:

/home/js/tests/my_dir
/home/js/tests/my_dir/top.log
/home/js/tests/my_dir/t1.txt
/home/js/tests/my_dir/t2.txt
/home/js/tests/my_dir/test2
/home/js/tests/my_dir/test2/t3.txt
/home/js/tests/my_dir/test1
/home/js/tests/my_dir/test1/a1.log
/home/js/tests/my_dir/a1.log
/home/js/tests/my_dir/bb.log

File API로 파일 처리

forEach로 순회할 때, File 객체를 전달하기 때문에 File 클래스의 모든 API를 사용하여 파일을 처리할 수 있습니다.

import java.io.File

fun main(args: Array<String>){

    File("/home/js/tests/my_dir").walk().forEach {
        if (it.isFile) {
            println("file: $it")
        }
        if (it.isDirectory) {
            println("directory: $it")
        }
    }
}

Output:

directory: /home/js/tests/my_dir
file: /home/js/tests/my_dir/top.log
file: /home/js/tests/my_dir/t1.txt
file: /home/js/tests/my_dir/t2.txt
directory: /home/js/tests/my_dir/test2
file: /home/js/tests/my_dir/test2/t3.txt
directory: /home/js/tests/my_dir/test1
file: /home/js/tests/my_dir/test1/a1.log
file: /home/js/tests/my_dir/a1.log
file: /home/js/tests/my_dir/bb.log

2. File.walkBottomUp() : 재귀적으로 디렉토리의 파일 리스트 출력

다음과 같이 File.walkBottomUp()를 이용하여 특정 경로를 탐색하며 모든 파일들을 출력할 수 있습니다. 최하위 경로에서 최상위 경로 순서로 파일을 탐색합니다.

import java.io.File

fun main(args: Array<String>){

    File("/home/js/tests/my_dir").walkBottomUp().forEach {
        println(it)
    }
}

Output:

/home/js/tests/my_dir/top.log
/home/js/tests/my_dir/t1.txt
/home/js/tests/my_dir/t2.txt
/home/js/tests/my_dir/test2/t3.txt
/home/js/tests/my_dir/test2
/home/js/tests/my_dir/test1/a1.log
/home/js/tests/my_dir/test1
/home/js/tests/my_dir/a1.log
/home/js/tests/my_dir/bb.log
/home/js/tests/my_dir

3. File.walkTopDown() : 재귀적으로 디렉토리의 파일 리스트 출력

다음과 같이 File.walkTopDown()를 이용하여 특정 경로를 탐색하며 모든 파일들을 출력할 수 있습니다. 최상위 경로에서 최하위 경로 순서로 파일을 탐색합니다.

import java.io.File

fun main(args: Array<String>){

    File("/home/js/tests/my_dir").walkTopDown().forEach {
        println(it)
    }
}

Output:

/home/js/tests/my_dir
/home/js/tests/my_dir/top.log
/home/js/tests/my_dir/t1.txt
/home/js/tests/my_dir/t2.txt
/home/js/tests/my_dir/test2
/home/js/tests/my_dir/test2/t3.txt
/home/js/tests/my_dir/test1
/home/js/tests/my_dir/test1/a1.log
/home/js/tests/my_dir/a1.log
/home/js/tests/my_dir/bb.log

References

Loading script...
codechachaCopyright ©2019 codechacha