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

被折叠的 条评论
为什么被折叠?



