HarmonyOS鸿蒙Next中保存文件到本地

HarmonyOS鸿蒙Next中保存文件到本地 cke_251.png

请问这个半模态如何唤起啊? 昨天写保存到本地发现都是点击保存就直接到了指定的文件夹里面 然后看分享下边有一个另存为 我感觉这个写法比较合理一点 然后找资料没找到相关的资料


更多关于HarmonyOS鸿蒙Next中保存文件到本地的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

更多关于HarmonyOS鸿蒙Next中保存文件到本地的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


学习了

好的,请提供您需要转换的HTML内容。

在HarmonyOS Next中保存文件到本地,可使用@ohos.file.fs模块。通过fs.openSync()获取文件描述符,使用fs.writeSync()写入数据,最后fs.closeSync()关闭文件。需申请ohos.permission.WRITE_MEDIA权限。

在HarmonyOS Next中,要实现用户手动选择路径保存文件(类似“另存为”功能),需要使用系统提供的文件选择器(FilePicker) 来唤起半模态界面,而不是直接写入固定目录。

核心步骤如下:

  1. 导入模块

    import picker from '@ohos.file.picker';
    import fs from '@ohos.file.fs';
    import common from '@ohos.app.ability.common';
    
  2. 创建并调用文件保存选择器

    // 假设在Ability的上下文中调用
    let context = getContext(this) as common.UIAbilityContext;
    
    // 1. 创建文件保存选择器实例
    const documentSavePicker = new picker.DocumentSavePicker();
    // 2. 配置选择器参数(可选)
    documentSavePicker.saveFileType = ['.txt', '.pdf']; // 指定可保存的文件类型
    // 3. 唤起半模态界面,让用户选择保存位置和文件名
    let fileSaveUri = await documentSavePicker.save(context);
    if (!fileSaveUri) {
      // 用户取消了操作
      return;
    }
    // fileSaveUri 是用户选择的文件保存位置(一个Uri对象)
    
  3. 将数据写入用户选择的路径

    // 4. 使用file.fs模块打开并写入文件
    let file = await fs.open(fileSaveUri, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE);
    let data = "这是要保存的内容"; // 你的文件数据
    await fs.write(file.fd, data); // 写入数据
    await fs.close(file.fd); // 关闭文件
    

关键点说明:

  • picker.DocumentSavePicker() 是专门用于“另存为”场景的API。调用其 save() 方法会自动唤起你截图中所示的半模态界面,用户可以在其中浏览目录、输入文件名并确认保存位置。
  • 获取到的 fileSaveUri 是一个临时授权URI,应用通过 file.fs 模块的API即可直接进行读写操作。
  • 这种方式遵循了HarmonyOS Next的隐私和安全规范,应用无法直接访问用户设备的任意存储路径,必须通过系统UI(文件选择器)获得用户明确授权后才能进行文件操作。

你之前遇到的“点击保存就直接到了指定文件夹”的情况,很可能是直接使用了 file.fs 模块向应用沙箱或公共目录的固定路径写入了数据,跳过了用户交互环节。要提供“另存为”体验,必须使用 FilePicker

回到顶部