鸿蒙文件操作

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

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

相关推荐
FreeBuf_2 小时前
认证噩梦:新型MacSync窃密木马绕过Gatekeeper劫持Mac设备
macos
90后的晨仔2 小时前
鸿蒙ArkUI如何使用RGB、十六进制等设置颜色值?
harmonyos
音浪豆豆_Rachel4 小时前
Flutter鸿蒙化之深入解析Pigeon多参数接口设计:multiple_arity.dart全解
flutter·harmonyos
音浪豆豆_Rachel4 小时前
Flutter鸿蒙文件选择器深度解析:文本文件处理与跨平台挑战
flutter·harmonyos
云川之下5 小时前
【网络】华为交换机S3700与S5700详解
服务器·网络·华为
kirk_wang8 小时前
Flutter Catcher 在鸿蒙端的错误捕获与上报适配指南
flutter·移动开发·跨平台·arkts·鸿蒙
绝世唐门三哥8 小时前
Mac 免费 GIF 录制软件全攻略:下载、安装与使用指南
macos·gif
奔跑的露西ly9 小时前
【HarmonyOS NEXT】沉浸式页面实现
华为·harmonyos
小Tomkk9 小时前
我开发的一款鸿蒙游戏《猜数字大师》 应用介绍 和技术架构
游戏·华为·harmonyos
鸿蒙开发工程师—阿辉9 小时前
HarmonyOS 5 数据持久化:状态持久化 (PersistentStorage)
华为·harmonyos