鸿蒙文件操作

@ohos.file.fs (文件管理)

简介

@ohos.file.fs (文件管理) 模块是鸿蒙系统(HarmonyOS)中用于处理文件操作的核心基础能力,提供文件/目录管理、信息统计、流式读写等功能。以下是支持的基础能力:

  • 文件/目录管理(创建、删除、重命名)
  • 文件信息统计(大小、修改时间等)
  • 流式读写操作
  • 路径访问控制

初始设置与路径获取

在开始文件操作前,需要先导入模块 并获取应用的沙箱路径,这是文件操作的起点,也能保证数据的安全性和隔离性。

  • 导入模块

    复制代码
    import fs from '@ohos.file.fs';
  • 获取沙箱路径 (Stage模型示例):

    复制代码
    import UIAbility from '@ohos.app.ability.UIAbility';
    import window from '@ohos.window';
    
    export default class EntryAbility extends UIAbility {
      onWindowStageCreate(windowStage: window.WindowStage) {
        let context = this.context;
        let pathDir = context.filesDir; // 这就是你的应用沙箱目录路径
      }
    }

核心文件操作API介绍

列举了 @ohos.file.fs 模块中一些最常用的接口,方便你快速了解其功能范围(@ohos.file.fs API官方指南):

功能分类 接口名称 主要作用
文件信息 fs.stat(), fs.statSync() 获取文件或目录的详细信息,例如文件大小。
存在性检查 fs.access(), fs.accessSync() 检查指定路径的文件是否存在。
文件读写 fs.open(), fs.openSync() 打开文件,获取文件对象(File)。
fs.read(), fs.readSync() 从文件中读取数据。
fs.write(), fs.writeSync() 向文件中写入数据。
fs.close(), fs.closeSync() 关闭文件,释放资源。
流式操作 fs.createStream(), fs.createStreamSync() 创建文件流,适用于大文件。
stream.read(), stream.write() 通过流进行文件读写。
stream.close() 关闭文件流。
目录管理 fs.mkdir(), fs.mkdirSync() 创建目录。
fs.listFile(), fs.listFileSync() 列出目录下的所有文件和子目录。
文件管理 fs.copyFile(), fs.copyFileSync() 复制文件。
fs.moveFile(), fs.moveFileSync() 移动文件。
fs.rename(), fs.renameSync() 重命名文件或目录。
fs.unlink(), fs.unlinkSync() 删除单个文件。
fs.rmdir(), fs.rmdirSync() 删除整个空目录。

常用操作代码示例

获取文件信息

获取文件信息(异步 Promise)
复制代码
import { BusinessError } from '@kit.BasicServicesKit';
import { fileIo as fs } from '@kit.CoreFileKit';

let filePath = filesDir + '/test.txt'; // 应用沙箱路径

// 异步获取文件属性
fs.stat(filePath).then((stat: fs.Stat) => {
  console.info("文件大小: " + stat.size); 
}).catch((err: BusinessError) => {
  console.error("错误码: " + err.code + ", 错误信息: " + err.message);
});
同步获取文件信息
复制代码
let stat = fs.statSync(filePath);
console.info("文件大小: " + stat.size);

检查文件是否存在

复制代码
let filePath = pathDir + '/test.txt';
try {
  let exists = fs.accessSync(filePath);
  console.info(`File exists: ${exists}`);
} catch (err) {
  console.error(`Check file failed: ${err.code}, ${err.message}`);
}

创建并读写文件

复制代码
// 同步方式创建并读写文件
let file = fs.openSync(pathDir + '/test.txt', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
// 写入内容
let writeLen = fs.writeSync(file.fd, "Hello, HarmonyOS!");
console.info(`Write length: ${writeLen}`);
// 读取内容
let arrayBuffer = new ArrayBuffer(1024);
let readOption = { offset: 0, length: arrayBuffer.byteLength };
let readLen = fs.readSync(file.fd, arrayBuffer, readOption);
let content = new Uint8Array(arrayBuffer, 0, readLen);
console.info(`File content: ${String.fromCharCode.apply(null, content)}`);
// 关闭文件
fs.closeSync(file);

以流的形式读写文件

复制代码
async function readWriteFileWithStream() {
  let inputStream = fs.createStreamSync(pathDir + '/source.txt', 'r+');
  let outputStream = fs.createStreamSync(pathDir + '/destination.txt', "w+");
  
  let bufSize = 4096;
  let readSize = 0;
  let buf = new ArrayBuffer(bufSize);
  let readOption = { offset: readSize, length: bufSize };
  
  let readLen = await inputStream.read(buf, readOption);
  while (readLen > 0) {
    readSize += readLen;
    await outputStream.write(buf);
    readOption.offset = readSize;
    readLen = await inputStream.read(buf, readOption);
  }
  
  inputStream.closeSync();
  outputStream.closeSync();
}

将文件路径转换为文件对象

复制代码
async function getFileObject(filePath: string) {
  try {
    // 以只读模式打开文件,获取File对象
    let file = await fs.open(filePath, fs.OpenMode.READ_ONLY);
    console.info('File object obtained');
    // ... 可以使用file进行后续操作,如读取
    // 操作完毕后,记得关闭文件
    fs.closeSync(file);
  } catch (error) {
    console.error(`Open file failed: ${error.code}, ${error.message}`);
  }
}

重要注意事项

  • 权限申请 :如果需要进行文件操作,请记得在 module.json5 文件中配置必要的权限,例如 ohos.permission.READ_MEDIAohos.permission.WRITE_MEDIA

  • 资源释放 :无论是文件 (fd) 还是文件流 (stream),在使用完毕后,务必记得调用相应的 close 方法来释放系统资源,避免内存泄漏。

  • 错误处理 :在进行文件操作时,使用 try...catch 妥善处理可能出现的异常是个好习惯。

  • 沙箱路径 :为了保证应用数据的安全和符合系统规范,普通应用的文件操作应限制在应用沙箱路径内。

相关推荐
爱笑的眼睛111 小时前
深入理解HarmonyOS Calendar组件:高级日期选择实现与优化
华为·harmonyos
╰つ栺尖篴夢ゞ1 小时前
HarmonyOS之深入解析如何实现语音朗读能力
华为·api·harmonyos next·语音朗读
HMS Core1 小时前
【FAQ】HarmonyOS SDK 闭源开放能力 — Network Kit
华为·harmonyos
爱笑的眼睛111 小时前
HarmonyOS OCR文字识别应用开发:深度指南与分布式实践
华为·harmonyos
一只小风华~1 小时前
HarmonyOS:ArkTS 页导航
深度学习·华为·harmonyos·鸿蒙
你的眼睛會笑1 小时前
uniapp 鸿蒙元服务 真机调试流程指南
华为·uni-app·harmonyos
不爱吃糖的程序媛2 小时前
Electron 文件选择功能实战指南适配鸿蒙
javascript·electron·harmonyos
私人珍藏库3 小时前
[Android] AR绘画素描1.0版(AR Draw - Sketch Anime Cartoon 1.0)
macos·ar·sketch
云雾J视界4 小时前
预测电流控制在光伏逆变器中的低延迟实现:华为FPGA加速方案与并网稳定性验证
华为·fpga开发·dsp·光伏逆变器·mpcc