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

codechachaCopyright ©2019 codechacha