Kotlin文件

发布于:2025-07-16 ⋅ 阅读:(17) ⋅ 点赞:(0)

文件层级结构

为了在磁盘上更好地组织数据,可以将文件安排在目录中。一个父目录可以包含其他目录(称为子目录),从而形成一个文件层级结构

例如,在 Linux 的文件系统中,根目录 / 包含了所有其他的文件和目录,即使它们存储在不同的物理设备上。

⚠️ 说明:为了简洁清晰,本文未涉及空安全(null safety)相关内容。


文件与目录的基本概念

  • 文件:是存储介质上的一个命名数据单元,是操作系统中数据交互的基本单位。

  • 目录:是一种特殊的文件,用于组织其他文件。在一个典型的文件系统中,可能包含大量文件,使用目录有助于更高效地管理它们。

在 Kotlin 中,我们可以使用 java.io 包中的 File 类来操作文件和目录。


常用方法简介

方法名 作用说明
File.isDirectory 判断是否为目录
File.isFile 判断是否为普通文件
File.exists() 检查文件是否存在
File.resolve(name) 在当前目录中解析得到一个新文件对象
File.createNewFile() 创建一个新文件
File.mkdir() 创建一个新目录

示例代码说明:

val outDir = File("outDir")
println(outDir.exists())    // false
outDir.mkdir()
println(outDir.exists())    // true
println(outDir.isDirectory) // true

val file = outDir.resolve("newFile.txt") // 等同于 outDir/newFile.txt
println(file.exists())      // false
file.createNewFile()        
println(file.exists())      // true
println(file.isFile)        // true
  • 创建一个目录 outDir

  • 在其中创建一个新文件 newFile.txt

  • 使用 exists()isDirectory()isFile() 方法检查文件系统状态

遍历文件层级结构

java.io.File 中的方法:
方法名 说明
getParentFile() 获取父目录对应的 File 对象
getParent() 获取父目录的路径字符串
listFiles() 获取当前目录下的所有文件(返回数组)
list() 获取文件名列表(字符串数组)
kotlin.io 提供的增强方法:
  • File.walk(direction):返回一个 FileTreeWalk 对象,可遍历目录和文件

  • File.walkTopDown():先访问目录,再访问文件(深度优先)

  • File.walkBottomUp():先访问文件,再访问目录(深度优先)

val fileTree = File("myDir").walkTopDown()
for (file in fileTree) {
    println(file.name)
}

Path(路径)操作

kotlin.io.path 扩展了对 java.nio.file.Path 的支持,允许我们更方便地进行文件和目录操作。

常用方法
方法名 说明
listDirectoryEntries() 列出目录中的文件
copyTo() 拷贝文件到目标位置
moveTo() 移动文件到新位置
writeText() 写入文本内容到文件
readText() 读取完整文件为字符串
readLines() 将文件按行读取为字符串集合
walk() 遍历所有子目录和文件
copyToRecursively() 递归复制整个目录及其内容到新位置

示例代码说明

fun main() {
    val sourcePath = Path("sourceDir/file.txt")
    val destinationPath = Path("destDir/file.txt")

    val filesInDir = Path("sourceDir").listDirectoryEntries()
    println("Files in sourceDir: $filesInDir")

    sourcePath.copyTo(destinationPath, overwrite = true)
    println("File copied from sourceDir to destDir.")

    val movedPath = destinationPath.moveTo(Paths.get("destDir/movedFile.txt"), overwrite = true)
    println("File moved to: $movedPath")

    movedPath.writeText("Hello, world!")
    println("Text written to file.")

    val text = movedPath.readText()
    println("Text read from file: $text")

    val lines = movedPath.readLines()
    println("Lines read from file: $lines")

    val walkedPaths = Path("destDir").walk().toList()
    println("Walked paths: $walkedPaths")

    Path("sourceDir").copyToRecursively(
        target = Paths.get("copyDir"),
        overwrite = true,
        followLinks = true,
    )
    println("Directory copied recursively.")
}

输出说明:

Files in sourceDir: [列出 sourceDir 中的文件]
File copied from sourceDir to destDir.
File moved to: destDir/movedFile.txt
Text written to file.
Text read from file: Hello, world!
Lines read from file: [Hello, world!]
Walked paths: [destDir, destDir/movedFile.txt]
Directory copied recursively.

总结

熟练掌握 Kotlin 中的文件层级结构处理对于开发者来说是非常重要的技能。它能显著提升你管理数据、组织文件的能力,也让应用程序的文件交互更高效、更健壮。



网站公告

今日签到

点亮在社区的每一天
去签到