当前位置: 首页 > news >正文

鸿蒙文件操作

@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_MEDIA 和 ohos.permission.WRITE_MEDIA

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

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

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

http://www.dtcms.com/a/596503.html

相关文章:

  • 手工做环保衣的网站湖北省工程建设信息官方网站
  • ShellCrash 安装与配置踩坑与解决日志
  • redis 的面试点总结
  • DS1302 简单介绍
  • JS DOM 操作与性能优化实战指南:构建高效可交互的页面结构
  • 【Java】基于策略模式 + 工厂模式多设计模式下:重构租房系统核心之城市房源列表缓存与高性能筛选
  • 学校门户网站作用收录查询工具
  • 如何在资源不足时快速补救项目延误
  • C++多线程之线程管控
  • 企业BI项目建设--如何梳理企业的指标体系
  • Linux 虚拟文件系统(VFS)深度解析
  • 系统思考:aAI产业链的啤酒游戏
  • 天文知识--北斗七星
  • 网站建设后需要交费吗网络营销专业培训机构
  • vue3获取循环中的ref
  • 11.11 脚本网页 跳棋
  • uni-app:实现快递的节点功能
  • 使用虚拟机搭建简易K8s实验环境的一种方法
  • 构建下一代临床AI诊断系统:基于CPC-Bench基准的工程化路线图(上)
  • Electron 原理浅析
  • Git 命令全攻略:从入门到实战
  • React底层原理
  • tensorflow 图像分类 之四
  • GEO优化:针对生成式AI内容分发逻辑的四大维度优化策略
  • 做a手机视频在线观看网站网页程序开发采购
  • USP-Ulysses+Ring-Attention技术原理
  • mirage 接口mock 拦截
  • flash网站设计教程北京建设网上银行
  • 高端网站建设设计公司有哪些wordpress网站迁移后插件
  • redis进阶 - 底层数据结构