HarmonyOS 鸿蒙Next 如何将用户数据存储到文件管理里面

发布于 1周前 作者 h691938207 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 如何将用户数据存储到文件管理里面

需要将用户在App里面更改的数据存入到文件管理里面

目前找到了拉起文件管理的方法但是未看到将数据存入的方法

2 回复

参考以下demo。首先通过Picker选择文件保存地址,再用uri保存该地址,再使用ohos.file.fs对文件进行读写。同理,你可以先获取文件保存地址后,再将数据存入。

import { common } from '@kit.AbilityKit';
import { picker } from '@kit.CoreFileKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { fileIo as fs } from '@kit.CoreFileKit';

@Entry
@Component
struct Picker {
  @State message1: string = '点我新建文件';
  @State message2: string = '点我写入文件'
  @State uri: string = ''

  build() {
    Row() {
      Column() {
        Text(this.message1)
          .fontSize(30)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            let context = getContext(this) as common.Context; // 请确保getContext(this)返回结果为UIAbilityContext
            try {
              let documentSaveOptions = new picker.DocumentSaveOptions();
              documentSaveOptions.newFileNames = ['DocumentViewPicker01.txt'];
              let documentPicker = new picker.DocumentViewPicker(context);
              documentPicker.save(documentSaveOptions).then((documentSaveResult: Array<string>) => {
                this.uri = documentSaveResult[0];
                console.info('DocumentViewPicker.save successfully, documentSaveResult uri: ' + this.uri);
              }).catch((err: BusinessError) => {
                console.error('DocumentViewPicker.save failed with err: ' + JSON.stringify(err));
              });
              let file = fs.openSync(this.uri, fs.OpenMode.READ_WRITE);
              console.info('file fd: ' + file.fd);
              let writeLen: number = fs.writeSync(file.fd, 'hello, world');
              console.info('write data to file succeed and size is:' + writeLen);
              fs.closeSync(file);
            } catch (error) {
              let err: BusinessError = error as BusinessError;
              console.error('DocumentViewPicker failed with err: ' + JSON.stringify(err));
            }
          })
          .margin({bottom:23})
        Text(this.message2)
          .fontSize(30)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            let file = fs.openSync(this.uri, fs.OpenMode.READ_WRITE);
            console.info('file fd: ' + file.fd);
            let writeLen: number = fs.writeSync(file.fd, 'hello, world');
            console.info('write data to file succeed and size is:' + writeLen);
            fs.closeSync(file);
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}


在HarmonyOS鸿蒙Next中,将用户数据存储到文件管理里,可以通过FilePicker实现文件的保存操作。以下是具体步骤:

  1. 导入选择器模块和基础文件API模块:使用相关的API模块来创建文件选择器实例。
  2. 创建保存选项实例:根据文件类型(如文档、音频等)创建相应的保存选项实例,并设置保存文件名、文件类型等参数。
  3. 创建文件选择器实例:通过传入上下文(context)来创建文件选择器实例。
  4. 调用save()接口:拉起FilePicker界面,用户选择目标文件夹后即可完成文件保存操作。保存成功后,会返回保存文档的URI。

需要注意的是,通过Picker访问相关文件无需申请权限,但save接口是用户可感知的,即会拉起FilePicker界面。保存成功后返回的URI权限是临时读写权限,待退出应用后台后失效。

如果需要在应用外查看所保存的文件,可尝试使用用户无感的安全控件创建媒体资源,或参考文件持久化授权访问以获取持久化权限。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部