文章配图:fileIo 文件读写

页面预览

前言

fileIo 是 HarmonyOS 的文件 I/O 模块,支持文件的打开、读写、删除等操作。在「猫猫大作战」中,fileIo 用于保存游戏截图文件读取配置文件

一、文件读写

import { fileIo } from '@kit.CoreFileKit';

async function writeTextFile(path: string, content: string): Promise<void> {
  const file = fileIo.openSync(path,
    fileIo.OpenMode.CREATE | fileIo.OpenMode.WRITE_ONLY | fileIo.OpenMode.TRUNC);
  const encoder = new TextEncoder();
  fileIo.writeSync(file.fd, encoder.encode(content));
  fileIo.closeSync(file);
}

async function readTextFile(path: string): Promise<string> {
  const file = fileIo.openSync(path, fileIo.OpenMode.READ_ONLY);
  const stat = fileIo.statSync(path);
  const buf = new ArrayBuffer(stat.size);
  fileIo.readSync(file.fd, buf);
  fileIo.closeSync(file);
  return new TextDecoder().decode(buf);
}

二、文件操作方法

方法 功能 说明
openSync(path, mode) 打开文件 返回 FD
readSync(fd, buf) 读取 读入 ArrayBuffer
writeSync(fd, buf) 写入 写入 ArrayBuffer
closeSync(fd) 关闭 释放 FD
unlinkSync(path) 删除 删除文件
mkdirSync(path) 创建目录 递归创建
statSync(path) 获取状态 大小、修改时间

三、文件打开模式

模式 说明 文件不存在
READ_ONLY 只读 报错
WRITE_ONLY 只写 报错
CREATE 创建文件 创建
TRUNC 清空内容(配合 WRITE) -
APPEND 追加 报错

四、游戏中的应用

// 保存游戏截图
async function saveScreenshot(pixelMap: PixelMap, path: string): Promise<void> {
  const packer = image.createImagePacker();
  const buffer = await packer.packing(pixelMap, {
    format: 'image/jpeg', quality: 85,
  });
  packer.release();

  const file = fileIo.openSync(path,
    fileIo.OpenMode.CREATE | fileIo.OpenMode.WRITE_ONLY | fileIo.OpenMode.TRUNC);
  fileIo.writeSync(file.fd, buffer);
  fileIo.closeSync(file);
}

五、最佳实践

  1. 用完关闭 FDcloseSync(fd) 释放资源
  2. try-finally 保证关闭:异常时也要 close
  3. 路径使用沙箱目录filesDircacheDir
  4. 大文件分块读写:单次读写不超 1MB

总结

fileIo 提供文件打开、读写、删除等基础操作。核心要点:openSync 打开、 readSync/writeSync 读写、 closeSync 关闭释放、 沙箱路径安全操作

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源:

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐