文章配图: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、测试、元服务和应用上架分发等。

更多推荐