Kotlin 文件系统实战操作

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

介绍



文件系统操作是任何编程语言中的基本任务之一。在 Kotlin 中,凭借其简洁的语法和强大的 Java 标准库扩展,文件和目录的操作变得简单直观。



在本文中,我们将通过实践来学习基本操作:创建、读取、写入、复制、移动和删除文件与文件夹。所有示例均使用 Kotlin 编写,可直接用于您的项目。本文适合初学者以及希望巩固知识或寻找日常任务最佳解决方案的经验丰富的开发者。



主要类与导入



在 Kotlin 中操作文件系统时,使用 java.io 包(例如 File)和 java.nio.file 包(例如 Path、Files)中的类。现代推荐优先使用 java.nio.file,因为该 API 性能更高且更便捷。



所有示例需要以下导入:



import java.io.Fileimport java.nio.file.Pathimport java.nio.file.Pathsimport java.nio.file.Filesimport java.nio.file.StandardCopyOptionimport java.nio.file.StandardOpenOption


创建文件和目录



我们从最简单的操作开始——创建新文件和文件夹。



// 创建目录val dir = File("my_directory")if (!dir.exists()) {    dir.mkdirs() // mkdirs() 会创建所有缺失的父目录    println("目录已创建:${dir.absolutePath}")}

// 创建文件val file = File(dir, "example.txt")if (!file.exists()) { file.createNewFile() println("文件已创建:${file.absolutePath}")}


请注意:mkdirs() 会创建完整的目录链(如果不存在)。mkdir() 仅创建最后一个目录,如果父文件夹不存在则返回 false。



读取和写入文件



这是最常见的操作。Kotlin 提供了几种优雅的方式来处理文件内容。



写入文件



val path = Paths.get("my_directory/write_example.txt")

// 要写入的字符串val content = "Привет, мир! Это строка записана в файл.Вторая строка."

// 简单写入字符串(覆盖文件)Files.writeString(path, content)

// 写入字符串列表val lines = listOf("Строка 1", "Строка 2", "Строка 3")Files.write(path, lines)

// 追加到文件末尾val additionalContent = "Дополнительная строка."Files.writeString(path, additionalContent, StandardOpenOption.APPEND)


Files.writeString() 方法自 Java 11 起可用,并在 Kotlin/JVM 中支持。如果您需要支持更旧的版本,请使用 Files.write() 并指定编码。



读取文件



val path = Paths.get("my_directory/write_example.txt")

// 将整个内容读取为字符串val fullContent = Files.readString(path)println("文件内容:$fullContent")

// 读取为字符串列表val allLines: List<String> = Files.readAllLines(path)allLines.forEachIndexed { index, line -> println("第 ${index + 1} 行:$line")}

// 使用 Stream 读取(适用于大文件)Files.lines(path).use { stream -> stream.forEach { line -> println("正在处理行:$line") }}


.use { ... } 结构确保处理完成后关闭流,这在处理大文件时尤其重要。



复制、移动和重命名



这些操作也通过 java.nio.file.Files 实现。



复制文件



val source = Paths.get("my_directory/example.txt")val destination = Paths.get("my_directory/backup/example_copy.txt")

博客

书籍推荐