15.4 遍历文件树
和Groovy一样,Kotlin也提供了方便的功能来遍历文件树。遍历文件树需要调用扩展方法walk()。它会返回一个FileTreeWalk对象,它有一些方法用于设置遍历方向和深度,详情参见FileTreeWalk API 文档说明。
提示:FileTreeWalk API 文档链接
下面的例子遍历了指定文件夹下的所有文件。
fun traverseFileTree(filename: String) {
val f = File(filename)
val fileTreeWalk = f.walk()
fileTreeWalk.iterator().forEach { println(it.absolutePath) }
}
测试代码:
@Test fun testTraverseFileTree() {
KFileUtil.traverseFileTree(".")
}
运行上面的测试代码,它将输出当前目录下的所有子目录及其文件。
我们还可以遍历当前文件下面所有子目录文件,存入一个 Iterator<File> 中
fun getFileIterator(filename: String): Iterator<File> {
val f = File(filename)
val fileTreeWalk = f.walk()
return fileTreeWalk.iterator()
}
我们遍历当前文件下面所有子目录文件,还可以根据条件过滤,并把结果存入一个 Sequence
fun getFileSequenceBy(filename: String, p: (File) -> Boolean): Sequence<File> {
val f = File(filename)
return f.walk().filter(p)
}
测试代码:
@Test fun testGetFileSequenceBy() {
val fileSequence1 = KFileUtil.getFileSequenceBy(".", {
it.isDirectory
})
fileSequence1.forEach { println("fileSequence1: ${it.absoluteFile} ") }
val fileSequence2 = KFileUtil.getFileSequenceBy(".", {
it.isFile
})
fileSequence2.forEach { println("fileSequence2: ${it.absoluteFile} ") }
val fileSequence3 = KFileUtil.getFileSequenceBy(".", {
it.extension == "kt"
})
fileSequence3.forEach { println("fileSequence3: ${it.absoluteFile} ") }
}
在工程中运行上面的测试代码,它将会有类似下面的输出:
...
...
fileSequence3: /Users/jack/kotlin/chapter15_file_io/./src/main/kotlin/com/easy/kotlin/fileio/KFileUtil.kt
fileSequence3: /Users/jack/kotlin/chapter15_file_io/./src/main/kotlin/com/easy/kotlin/fileio/KNetUtil.kt
fileSequence3: /Users/jack/kotlin/chapter15_file_io/./src/main/kotlin/com/easy/kotlin/fileio/KShellUtil.kt
fileSequence3: /Users/jack/kotlin/chapter15_file_io/./src/test/kotlin/com/easy/kotlin/fileio/KFileUtilTest.kt
当前内容版权归 JackChan1999 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 JackChan1999 .