OpenHarmony 文件管理—应用接入数据备份恢复(API 10)

介绍

应用接入数据备份恢复需要通过配置BackupExtensionAbility实现。

BackupExtensionAbility,是Stage模型中扩展组件ExtensionAbility的派生类。开发者可以通过修改配置文件定制备份恢复框架的行为,包括是否允许备份恢复,备份哪些文件等。

本sample主要给备份流程提供应用,用于生成数据和显示数据。

效果预览

使用说明:

  1. 点击按钮“生成文件数据”,应用会随机生成2个到10个txt文件,大小在1Byte到1024Byte之间,用于校验备份和恢复的数据为同一数据。
  2. 本应用仅适用于生成和显示数据,具体的备份和恢复的操作目前需要使用hdc shell命令操作。
  3. 具体操作方面,进入应用点击按钮生成文件数据后,进入hdc shell,使用backup_tool backup --isLocal=true --bundle com.samples.backupextension --pathCapFile /data/backup/tmp命令进行备份。然后可以把应用删掉,重新安装应用后进入hdc shell,使用backup_tool restore --bundle com.samples.backupextension --pathCapFile /data/backup/tmp,提示成功后,重新打开应用可以看到备份的文件显示在列表里。

工程目录

entry/src/main/ets/
|---Application
|---Common
|   |---Logger.ts                      // 日志工具
|---MainAbility
|   |---EntryAbility.ts                // Ability类
|---fileFs
|   |---CreateFile.ts                  // 创建文件
|---pages
|   |---Index.ets                      // 首页

具体实现

  1. 在应用配置文件module.json5中注册extensionAbilities相关配置

新增"extensionAbilities"字段,其中注册类型"type"设置为"backup",元数据信息"metadata"新增一个"name""ohos.extension.backup"的条目。

BackupExtensionAbility配置文件示例:

{
    "extensionAbilities": [
        {
            "description": "$string:ServiceExtAbility",
            "icon": "$media:icon",
            "name": "BackupExtensionAbility",
            "type": "backup",
            "visible": true,
            "metadata": [
                {
                    "name": "ohos.extension.backup",
                    "resource": "$profile:backup_config"
                }
            ],
            "srcEntrance": "./ets/common/BackupExtension.ts",
        }      
    ]
}
  1. 新增元数据资源配置文件

在元数据资源配置文件中,定义备份恢复时需要传输的文件。元数据资源配置文件名称需要与module.json5"metadata.resource"名称保持一致,其保存位置在Profile文件夹下。

元数据资源配置文件示例:

{
  "allowToBackupRestore": true,
    "includes": [
    "data/storage/el1/database/",
    "data/storage/el1/base/files/",
    "data/storage/el1/base/preferences/",
    "data/storage/el1/base/haps/<module-name>/files/",
    "data/storage/el1/base/haps/<module-name>/preferences/",
    "data/storage/el2/database/",
    "data/storage/el2/base/files/",
    "data/storage/el2/base/preferences/",
    "data/storage/el2/base/haps/<module-name>/files/",
    "data/storage/el2/base/haps/<module-name>/preferences/",
    "data/storage/el2/distributedfiles/"
    ],
    "excludes": [
      "/data/storage/el2/base/files/users/"
    ]
}

其中includes里面的文件夹是用户需要备份数据的路径,excludes为用户在includes内所需要排除的备份数据目录。includes配置内中是应用子Hap名称。

  1. 使用应用生成数据:

点击界面的“生成文件数据”按钮,会使用以下代码生成文件,并在onPageShow中获取文件名列表和文件大小列表,然后显示在界面上。

async createTestFiles(): Promise<void> {
    try {
      let num = Math.floor(Math.random() * FILE_NUM_MAX) + FILE_NUM_MIN;
      if (!fs.accessSync(this.baseDir)) {
        fs.mkdirSync(this.baseDir);
      }
      let dpath = this.baseDir;
      Logger.info(TAG, 'sanBoxFileDir = ' + dpath);
      Logger.info(TAG, 'num is  = ' + num);
      for (let i = 0; i < num; i++) {
        let myFile = dpath + `/TestFile_${i}.txt`;
        Logger.info(TAG, 'readyFile myFile = ' + myFile);
        let file = fs.openSync(myFile, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE);
        fs.writeSync(file.fd, new ArrayBuffer(ONE_KILOBYTE * Math.random()));
        fs.closeSync(file);
      }
    } catch (e) {
      Logger.error(TAG, 'Failed to prepare media files, error:' + e.message + e.code);
    }
  }
  1. 备份与恢复操作:

由于目前备份与恢复尚未提供具体的应用接口,所以备份与功能仅提供命令行方式进行检验:

应用备份
backup_tool backup --isLocal=true --bundle com.sample.backupextension  --pathCapFile /data/backup/tmp
备份成功提示:
BundleStarted errCode = 0, BundleName = com.example.backupextension
FileReady owner = com.example.backupextension, fileName = manage.json, sn = 0, fd = 9
FileReady owner = com.example.backupextension, fileName = part.0.tar, sn = 0, fd = 9
BundleFinished errCode = 0, BundleName = com.example.backupextension
backup successful

应用恢复
backup_tool restore --bundle com.sample.backupextension --pathCapFile /data/backup/tmp
恢复成功提示:
BundleStarted errCode = 0, BundleName = com.example.backupextension
FileReady owner = com.example.backupextension, fileName = part.0.tar, sn = 0, fd = 8
FileReady owner = com.example.backupextension, fileName = manage.json, sn = 0, fd = 8
BundleFinished errCode = 0, BundleName = com.example.backupextension
Restore successful

backup详细说明可以使用backup -help查看。

相关权限

ohos.permission.GET_BUNDLE_INFO_PRIVILEGED

依赖

不涉及。

约束与限制

1.本示例仅支持标准系统上运行,支持设备:RK3568。

2.本示例为Stage模型,支持API11版本SDK,SDK版本号(API Version 11 Beta1),镜像版本号(4.1 Beta1)

3.本示例需要使用DevEco Studio 版本号(4.0 Release)及以上版本才可编译运行。

4.本示例所配置的权限ohos.permission.GET_BUNDLE_INFO_PRIVILEGED为system_basic级别(相关权限级别可通过权限定义列表 查看),需要手动配置对应级别的权限签名(具体操作可查看自动化签名方案) 。

下载

如需单独下载本工程,执行如下命令:

git init
git config core.sparsecheckout true
echo code/BasicFeature/FileManagement/FileBackupExtension > .git/info/sparse-checkout
git remote add origin https://gitee.com/openharmony/applications_app_samples.git
git pull origin master

码牛课堂也为了积极培养鸿蒙生态人才,让大家都能学习到鸿蒙开发最新的技术,针对一些在职人员、0基础小白、应届生/计算机专业、鸿蒙爱好者等人群,整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线。大家可以进行参考学习:https://qr21.cn/FV7h05

①全方位,更合理的学习路径
路线图包括ArkTS基础语法、鸿蒙应用APP开发、鸿蒙能力集APP开发、次开发多端部署开发、物联网开发等九大模块,六大实战项目贯穿始终,由浅入深,层层递进,深入理解鸿蒙开发原理!

②多层次,更多的鸿蒙原生应用
路线图将包含完全基于鸿蒙内核开发的应用,比如一次开发多端部署、自由流转、元服务、端云一体化等,多方位的学习内容让学生能够高效掌握鸿蒙开发,少走弯路,真正理解并应用鸿蒙的核心技术和理念。

③实战化,更贴合企业需求的技术点
学习路线图中的每一个技术点都能够紧贴企业需求,经过多次真实实践,每一个知识点、每一个项目,都是码牛课堂鸿蒙研发团队精心打磨和深度解析的成果,注重对学生的细致教学,每一步都确保学生能够真正理解和掌握。

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:https://qr21.cn/FV7h05

如何快速入门:

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr21.cn/FV7h05

大厂鸿蒙面试题::https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

<think>嗯,用户想了解OpenHarmony文件管理系统如何进行文件管理,需要操作指南。首先,我需要回忆一下OpenHarmony的相关文档和知识。记得OpenHarmony文件管理主要依赖于系统应用文件管理器和媒体库接口,还有可能涉及底层API的使用。 首先,用户可能需要知道如何访问和操作文件。根据引用[5],媒体库接口(@ohos.multimedia.mediaLibrary)被用来扫描音视频文件,进行重命名、删除等操作。这部分应该作为基础文件操作的重点。比如,获取媒体库实例,查询文件,获取文件属性等步骤。 然后,用户可能关心文件路径的问题。OpenHarmony应用沙箱机制限制了直接访问系统路径,所以需要通过媒体库接口获取安全的URI,这可能需要在回答中详细说明,避免用户误操作。 另外,用户可能想知道如何实际编写代码示例。需要提供具体的代码片段,比如如何获取媒体库实例,查询图片、视频、音频等,以及如何获取文件属性。同时,代码中要使用正确的接口,如mediaLibrary.getMediaLibrary(),并处理异步操作,比如使用async/await。 还有,用户可能对文件分类管理感兴趣,比如按类型分类(图片、视频、音频、文档)。这里可以结合媒体库的查询条件,如MediaType.VIDEO等,来展示如何分类获取文件列表。 安全权限也是重要的一环。根据引用[5],需要声明ohos.permission.READ_MEDIA和ohos.permission.WRITE_MEDIA权限,并且动态申请这些权限。这部分需要详细说明权限申请的步骤,确保用户知道如何配置。 此外,用户可能需要了解如何扩展功能,比如文件加密或云同步。可以提到使用@ohos.file.fs接口进行更底层的操作,但要注意系统权限的限制,普通应用可能无法直接使用这些接口。 最后,结合引用[3]中的鸿蒙开发方向,可以推荐用户参考相关学习文档,比如南向开发的环境搭建和系统移植指南,但用户的问题更偏向应用开发,所以可能需要适当调整推荐内容,确保相关性。 总结下来,回答的结构应该是:概述文件管理系统,分步骤讲解基础操作(访问、分类、属性获取),提供代码示例,强调权限和安全机制,最后给出扩展功能和相关学习资源。同时,确保使用正确的中文术语和LaTeX格式,避免技术错误,并自然引用提供的参考文献。</think>### OpenHarmony 文件管理系统操作指南 OpenHarmony 文件管理系统基于分布式能力和权限管理机制,通过标准 API 提供文件操作功能。以下是关键操作流程: --- #### 一、基础文件操作 1. **文件访问入口** - 通过系统文件管理器访问本地/分布式文件 - 使用媒体库接口操作多媒体文件(需声明权限): ```typescript import mediaLibrary from '@ohos.multimedia.mediaLibrary'; // 获取媒体库实例 let media = mediaLibrary.getMediaLibrary(context); ``` 2. **文件查询与分类** ```typescript // 查询所有图片文件 let imageFetchOp = { selections: mediaLibrary.FileKey.MEDIA_TYPE + '=?', selectionArgs: [MediaType.IMAGE.toString()], }; let imageList = await media.getFileAssets(imageFetchOp); ``` 3. **文件属性获取** ```typescript // 获取文件基础信息 let fileAsset = await imageList.getFirstObject(); console.log(`文件名:${fileAsset.displayName} 大小:${fileAsset.size} 路径:${fileAsset.uri}`); ``` --- #### 二、核心 API 使用 1. **文件操作接口** [^5] | 操作类型 | 接口方法 | 示例代码 | |----------------|---------------------------|-------------------------------------------------------------------------| | 文件重命名 | `fileAsset.modify()` | `fileAsset.displayName = "newName.jpg"; await fileAsset.modify();` | | 文件删除 | `fileAsset.delete()` | `await fileAsset.delete();` | | 文件元数据读取 | `fileAsset.get()` | `let date = fileAsset.get(mediaLibrary.FileKey.DATE_ADDED);` | --- #### 三、权限与安全机制 1. **权限声明配置** 在 `config.json` 中添加: ```json "reqPermissions": [ { "name": "ohos.permission.READ_MEDIA", "reason": "读取媒体文件" }, { "name": "ohos.permission.WRITE_MEDIA", "reason": "修改媒体文件" } ] ``` 2. **动态权限申请** ```typescript import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; let atManager = abilityAccessCtrl.createAtManager(); try { await atManager.requestPermissionsFromUser(['ohos.permission.READ_MEDIA']); } catch(err) { console.error("权限申请失败"); } ``` --- #### 四、扩展功能实现 1. **文件加密存储** ```typescript import fileio from '@ohos.file.fs'; // 创建加密文件 let encryptedFile = await fileio.open("internal://app/files/secret.dat", fileio.OpenMode.READ_WRITE | fileio.OpenMode.CREATE); await fileio.write(encryptedFile.fd, encryptData(data)); ``` 2. **分布式文件同步** [^1] ```typescript import distributedFile from '@ohos.distributedFile'; // 获取分布式文件系统实例 let dfs = distributedFile.getDistributedFileSystem(); dfs.syncFile("local://file.txt", "remote://device_id/files/"); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值