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

[Harmony]大文件持久化

1.添加权限

在module.json5文件中添加权限

"requestPermissions": [{"name": "ohos.permission.READ_WRITE_USER_FILE", // 读写用户数据"reason": "$string:read_write_user_file_reason","usedScene": {"abilities": ["MFLargeDataStorage"],"when": "always"}}
]

string.json

{"string": [{"name": "read_write_user_file_reason","value": "读写用户文件"}]
}

 

2.封装大文件数据持久工具

import fs from '@ohos.file.fs';
import { BusinessError } from '@ohos.base';
import common from '@ohos.app.ability.common';
import ConsoleLog from '../extension/ConsoleLog';
import { buffer } from '@kit.ArkTS';class MFLargeDataStorage {private static readonly FILE_NAME = 'user_data.json';private static _context: common.UIAbilityContext;static setContext(abilityContext: common.UIAbilityContext): void {MFLargeDataStorage._context = abilityContext;}private static getFilePath(): string {if (!MFLargeDataStorage._context) {throw new Error('Context not initialized');}return `${MFLargeDataStorage._context.filesDir}/${MFLargeDataStorage.FILE_NAME}`;}static async saveUserJson(data: object): Promise<void> {const filePath = MFLargeDataStorage.getFilePath();const jsonStr = JSON.stringify(data);try {const file = await fs.open(filePath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE);await fs.write(file.fd, jsonStr);await fs.close(file.fd);} catch (err) {ConsoleLog.error(`[MFLargeDataStorage] save error: ${(err as BusinessError).message}`);}}static async saveUserJsonString(jsonStr: string): Promise<void> {const filePath = MFLargeDataStorage.getFilePath();try {const file = await fs.open(filePath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE);await fs.write(file.fd, jsonStr);await fs.close(file.fd);} catch (err) {ConsoleLog.error(`[MFLargeDataStorage] save error: ${(err as BusinessError).message}`);}}static async loadUserJson(): Promise<string> {const filePath = MFLargeDataStorage.getFilePath();try {if (!await fs.access(filePath)) {return "";}const file = await fs.open(filePath, fs.OpenMode.READ_ONLY);const stat = await fs.stat(filePath);const buf = new ArrayBuffer(stat.size);await fs.read(file.fd, buf);await fs.close(file.fd);// 使用buffer模块的from和toString方法const str = buffer.from(buf).toString('utf-8');return str;} catch (err) {ConsoleLog.error(`[MFLargeDataStorage] load error: ${(err as BusinessError).message}`);return "";}}
}export default MFLargeDataStorage;

3.使用示例

import common from '@ohos.app.ability.common';
import ConsoleLog from '../support/extension/ConsoleLog';
import MFLargeDataStorage from '../support/data/MFLargeDataStorage';interface UserItem {name: string;age: number;
}@Entry
@Component
struct Index {private context = getContext(this) as common.UIAbilityContext;aboutToAppear() {if (!this.context) {ConsoleLog.error('无效的上下文对象');return;}MFLargeDataStorage.setContext(this.context);}build() {RelativeContainer() {Column() {Button('保存大文件').onClick(async () => {const userData: UserItem = { name: "张三", age: 25 };try {await MFLargeDataStorage.saveUserJson(userData);} catch (err) {ConsoleLog.error('保存失败:', err);}})Button('获取大文件').onClick(async () => {const loadedData = await MFLargeDataStorage.loadUserJson();ConsoleLog.log(loadedData); // 输出: {name: "张三", age: 25}})}}.height('100%').width('100%')}
}

http://www.xdnf.cn/news/6558.html

相关文章:

  • Spring-messaging-MessageHandler接口实现类ServiceActivatingHandler
  • Pangle出海指南:如何实现ROI最大化?
  • Spring Boot多数据源配置的陷阱与终极解决方案
  • 在 Vue 中使用 Three.js 渲染 GLB 格式模型
  • antd 主题色定制
  • C++(12):using声明
  • 智能包装机控制终端技术方案:基于EFISH-SCB-RK3588/SAIL-RK3588的全场景国产化替代解析
  • Console Importer浏览器插件的编译 及 制作成.crx浏览器插件的步骤
  • electron进程通信
  • 128.在 Vue 3 中使用 OpenLayers 实现绘制矩形截图并保存地图区域
  • 关于xammp数据库打开不了,但是日志没错误的问题解决以及其数据库的备份
  • 如何利用 Python 爬虫按关键字搜索京东商品:实战指南
  • Docker 安装 MySQL8
  • OpenCV 图像直方图:从原理剖析到实战应用
  • linux系统服务
  • Qt信号槽机制与UI设计完全指南:从基础原理到实战应用
  • 【笔试训练】简单写词|dd爱框框|除2!
  • Cursor无法使用C/C++调试的解决办法
  • Ubuntu使用Docker搭建SonarQube企业版(含破解方法)
  • Hugging Face 中 LeRobot 使用的入门指南
  • LangChain4j +DeepSeek大模型应用开发——10 检索增强生成 RAG
  • Ubuntu下配置VScode出现#include错误请更新includePath的解决方法
  • Java类一文分解:JavaBean,工具类,测试类的深度剖析
  • 汽车零部件冲压车间MES一体机解决方案
  • 卷积神经网络和深度神经网络的区别是什么?
  • 数据结构与算法-线性表-单链表(Linked List)
  • OSCP备战-kioptrix 2014详细步骤
  • 第三十一节:直方图处理-直方图反向投影
  • 题目:两个线程交替输出1-100的数字,例如:t1--》1,t2--》2,....
  • 最小生成树(竞赛)