Kotlin文件
文件层级结构
为了在磁盘上更好地组织数据,可以将文件安排在目录中。一个父目录可以包含其他目录(称为子目录),从而形成一个文件层级结构。
例如,在 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) // trueval 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 中的文件层级结构处理对于开发者来说是非常重要的技能。它能显著提升你管理数据、组织文件的能力,也让应用程序的文件交互更高效、更健壮。