当前位置: 首页 > news >正文

存储文件操作

在 Kotlin 中操作文件的增删改查(CRUD)需要根据运行环境区分:**纯 JVM 环境**(如后端、桌面应用)直接使用 `java.io.File` 或 `java.nio.file`;**Android 环境**则需考虑分区存储、权限、MediaStore 等特性。本文将分两部分详细讲解,并提供完整的代码示例。

一、Kotlin/JVM 通用文件操作(标准库)

Kotlin 标准库对 `java.io.File` 进行了扩展,提供了简洁的 API。

1. 增(创建/写入文件)

```kotlin
import java.io.File

// 写入字符串(覆盖)
val file = File("example.txt")
file.writeText("Hello, Kotlin!")

// 追加内容
file.appendText("\nAnother line")

// 写入字节数组
file.writeBytes(byteArrayOf(65, 66, 67))

// 使用 writer 写入多行
file.bufferedWriter().use { writer ->
    writer.write("Line 1")
    writer.newLine()
    writer.write("Line 2")
}
```

 2. 删(删除文件或目录)

```kotlin
// 删除文件
val deleted = file.delete()   // 返回 Boolean

// 安全删除(如果文件存在)
file.deleteIfExists()         // Kotlin 1.9+ 扩展函数

// 删除目录(需递归)
fun deleteDirectory(dir: File) {
    dir.listFiles()?.forEach { child ->
        if (child.isDirectory) deleteDirectory(child) else child.delete()
    }
    dir.delete()
}
```

3. 改(修改文件内容、属性)

- **内容修改**:读取 -> 修改 -> 写回,或使用随机访问。

```kotlin
// 在文件开头插入内容(读取全部,修改后写回)
val content = file.readText()
file.writeText("Prefix\n" + content)

// 随机访问(修改特定位置)
RandomAccessFile(file, "rw").use { raf ->
    raf.seek(10)        // 移动到第10个字节
    raf.writeByte(42)
}

// 重命名/移动
file.renameTo(File("newname.txt"))
file.copyTo(File("copy.txt"), overwrite = true)
```

 4. 查(读取文件、查询属性、遍历目录)

```kotlin
// 读取全部内容
val text = file.readText()
val lines = file.readLines()

// 读取为字节数组
val bytes = file.readBytes()

// 属性查询
println("Name: ${file.name}")
println("Size: ${file.length()} bytes")
println("Last modified: ${file.lastModified()}")

// 遍历目录
File("/path/dir").walk().forEach { child ->
    println(child.absolutePath)
}

// 过滤特定扩展名
val txtFiles = File(".").listFiles {

http://www.jsqmd.com/news/632715/

相关文章:

  • intv_ai_mk11镜像免配置:开箱即用网页界面+独立venv环境部署解析
  • Lychee-Rerank快速部署:Windows/Mac/Linux三平台Streamlit启动指南
  • 不满意Oh My Zsh启动卡顿,来试试Starship吧燎
  • 2026年知名的化工厂酸原料/工业盐酸原料/氢氧化钠酸原料厂家推荐与选择指南 - 行业平台推荐
  • lora-scripts详细使用手册:图文并茂,带你完成LoRA训练全流程
  • 2026年评价高的北京办公室装修设计/北京办公室装修工程高评分公司推荐 - 行业平台推荐
  • 别再踩坑了!SQL Server数据类型那点事儿,看懂这篇少背三个锅型
  • 前端代码质量检查
  • Qwen3-Reranker实战案例:构建带反馈机制的迭代式RAG重排系统
  • 5分钟搞定:DeepSeek-R1-Distill-Qwen-1.5B网页版对话机器人搭建
  • 【实战部署+模型优化】YOLOv8花卉分类检测系统:从数据集构建到Web端应用全流程解析
  • 2026年比较好的卷材珍珠棉/护角珍珠棉/定制珍珠棉厂家最新推荐 - 品牌宣传支持者
  • Qwen Pixel Art新手指南:如何用Gradio界面实时调整prompt并预览变化
  • Pixel Couplet Gen 运维指南:模型服务监控与高可用保障
  • Whisper-large-v3案例展示:真实客服录音转写效果对比
  • 快速上手黑丝空姐-造相Z-Turbo:基于Z-Image-Turbo的Lora模型实战
  • 一键部署语音情感识别AI:Emotion2Vec+ Large镜像开箱即用教程
  • 一键复制TensorFlow-v2.9环境:从官方镜像提取配置,避免安装错误
  • 2026年质量好的漂珠板开料机/数控开料机厂家综合实力参考(2025) - 品牌宣传支持者
  • 政务数据安全实战:让敏感信息在用时脱敏、退场时彻底消失
  • CSS面试题2
  • Ubuntu服务器一键部署Qwen3.5-9B-AWQ-4bit:完整环境配置与性能调优
  • K8s持久化存储深度解析:PV、PVC、StorageClass三剑客的生产实战
  • Obsidian Dataview如何用3个核心策略将Markdown笔记变成智能知识网络?
  • 从《赚钱思维》到《持续成交》:陈卫军构建中国本土营销理论体系
  • 2026年比较好的磨砂玻璃/内置百叶玻璃/玻璃全方位厂家推荐参考 - 行业平台推荐
  • LabVIEW多路PID与循环单路PID区别
  • 网盘直链解析引擎:八大平台真实链接获取与下载效率优化方案
  • Python的__complex__方法支持复数运算扩展与数值类型
  • 终极指南:如何将Switch掌机打造成PC游戏串流神器