鸿蒙文件操作

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

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

相关推荐
小雨青年1 小时前
MateChat 进阶实战:打造零后端、隐私安全的“端侧记忆”智能体
前端·华为·ai·华为云·状态模式
国服第二切图仔3 小时前
Electron for 鸿蒙pc项目实战之tab标签页组件
javascript·electron·harmonyos·鸿蒙pc
kirk_wang4 小时前
Flutter插件在鸿蒙端的开发与部署:跨生态桥梁的架构与实现
flutter·移动开发·跨平台·arkts·鸿蒙
是Dream呀4 小时前
昇腾实战|算子模板库Catlass与CANN生态适配
开发语言·人工智能·python·华为
RisunJan5 小时前
【HarmonyOs】鸿蒙应用开发方向选择
华为·harmonyos
国服第二切图仔5 小时前
Electron for 鸿蒙pc项目实战之右键菜单组件
javascript·electron·harmonyos·鸿蒙pc
Huang兄5 小时前
HarmonyOS应用开发者的宝藏APP-HMOS代码工坊-组件堆叠滑动折叠效果(二)
harmonyos·arkts·arkui
Huang兄5 小时前
HarmonyOS应用开发者的宝藏APP-HMOS代码工坊-组件堆叠滑动折叠效果(一)
harmonyos
国服第二切图仔7 小时前
Electron for 鸿蒙PC项目实战之拖拽组件示例
javascript·electron·harmonyos
国服第二切图仔7 小时前
Electron for鸿蒙PC项目实战之天气预报应用
javascript·electron·harmonyos·鸿蒙pc