鸿蒙文件操作

@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 妥善处理可能出现的异常是个好习惯。

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

相关推荐
IT=>小脑虎9 分钟前
鸿蒙开发零基础小白学习知识点【基础版·详细版】
学习·华为·harmonyos
依旧风轻13 分钟前
NSTimer的运行机制
macos·objective-c·cocoa·nstimer
2501_9481226337 分钟前
React Native for OpenHarmony 实战:Steam 资讯 App 个人中心页面
javascript·react native·react.js·游戏·ecmascript·harmonyos
水手冰激淋1 小时前
rn_for_openharmony狗狗之家app实战-领养详情实现
harmonyos
粲然忧生2 小时前
腾讯云终端性能监控SDK正式上线,为鸿蒙开发适配保驾护航
android·腾讯云·harmonyos
AirDroid_cn2 小时前
鸿蒙NEXT:朗读网页时,如何跳过广告区域?
华为·harmonyos
奋斗的小青年!!2 小时前
OpenHarmony Flutter 穿梭框组件深度实践与优化
flutter·harmonyos·鸿蒙
特立独行的猫a2 小时前
[鸿蒙PC命令行移植适配] 移植ag命令到鸿蒙PC平台的完整实践
华为·harmonyos·鸿蒙pc·ag命令·命令行移植
旭日猎鹰2 小时前
鸿蒙环境添加React Native的bundle包
react native·react.js·harmonyos
特立独行的猫a3 小时前
鸿蒙PC生态三方命令行软件移植:XZ压缩工具移植到鸿蒙PC平台的完整指南
华为·harmonyos·移植·命令行·交叉编译·xz命令