Kotlin 快速遍历 File 及子目录筛选指定类型文件

幽灵船长酱 2024-08-03 ⋅ 31 阅读

引言

在 Kotlin 编程语言中,快速遍历 File(文件)及子目录,以筛选出指定类型的文件是一项常见的任务。这样的功能在很多场景下都非常有用,比如清理特定类型的文件、统计文件数量等等。本文将介绍一个简单而高效的方法,使用 Kotlin 的扩展函数和递归算法来实现这个功能。

方法

我们首先创建一个名为 FileExtensions.kt 的文件。在该文件中,我们将为 File 对象添加一个扩展函数,用于遍历该文件及其子目录,并返回特定类型文件的列表。以下是完整的代码:

import java.io.File

fun File.getFilesRecursively(extension: String): List<File> {
    val fileList = mutableListOf<File>()
    val files = this.listFiles() ?: return fileList

    for (file in files) {
        if (file.isDirectory) {
            fileList.addAll(file.getFilesRecursively(extension))
        } else if (file.extension.equals(extension, ignoreCase = true)) {
            fileList.add(file)
        }
    }

    return fileList
}

如何使用

现在我们可以在任何地方使用这个扩展函数。假设我们有一个名为 directory 的 File 对象,表示要遍历的目录。我们可以像下面这样调用扩展函数,以获取目录中的所有扩展名为 txt 的文件:

val directory = File("path/to/directory")
val txtFiles = directory.getFilesRecursively("txt")

示例

为了更好地说明该方法的用法,我们来看一个简单的示例。假设我们有一个包含多个文件的 data 目录,在这个目录下的子目录及文件类型如下:

data/
├── documents
│   ├── doc1.txt
│   ├── doc2.docx
│   └── doc3.txt
├── images
│   ├── image1.jpg
│   └── image2.png
└── other
    └── file.txt

我们想要获取 data 目录及其子目录中所有的 .txt 文件。我们可以使用以下代码来实现:

import java.io.File

fun File.getFilesRecursively(extension: String): List<File> {
    val fileList = mutableListOf<File>()
    val files = this.listFiles() ?: return fileList

    for (file in files) {
        if (file.isDirectory) {
            fileList.addAll(file.getFilesRecursively(extension))
        } else if (file.extension.equals(extension, ignoreCase = true)) {
            fileList.add(file)
        }
    }

    return fileList
}

fun main() {
    val directory = File("data")
    val txtFiles = directory.getFilesRecursively("txt")

    for (file in txtFiles) {
        println(file.absolutePath)
    }
}

运行以上代码,我们将会得到如下输出:

/Users/username/path/to/directory/data/documents/doc1.txt
/Users/username/path/to/directory/data/documents/doc3.txt
/Users/username/path/to/directory/data/other/file.txt

结论

在本文中,我们学习了如何使用 Kotlin 的扩展函数和递归算法来快速遍历 File 对象及其子目录,并筛选出满足特定条件的文件。这一方法可以帮助我们方便地处理文件操作,节省了手动遍历的时间和精力。希望这个方法对你有所帮助!


全部评论: 0

    我有话说: