HarmonyOS 鸿蒙Next 如何创建一个app可访问的文件夹

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

HarmonyOS 鸿蒙Next 如何创建一个app可访问的文件夹 目前的视频、音频如果需要访问,都需要单独指定或者放到app的沙箱里面,如何可以做到像百度网盘那种,可以设置一个app自己的文件夹,后续可以随时访问这个文件夹的内容。

10 回复

如果想要在共享目录下创建文件,可以利用DataAbilityHelper来实现,您可以参考下论坛中的案例:

https://developer.huawei.com/consumer/cn/forum/topic/0202539819343000037?fid=0101587866109860105

参考下以下示例中的沙箱目录文件写入公共目录部分:

import { BusinessError, request } from '@kit.BasicServicesKit';
import picker from '@ohos.file.picker';
import fs from '@ohos.file.fs';
import { common } from '@kit.AbilityKit';
import { buffer } from '@kit.ArkTS';
@Entry
@Component
struct DocumentSave {
  @State message: string = '下载文件';
  build() {
    RelativeContainer() {
      Text(this.message)
        .id('DocumentSaveHelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .fontColor(Color.Pink)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
        .onClick(() =>{
          const context = getContext(this);
          const downloadUrl = '文件链接名.pdf';
          try {
            request.downloadFile(context, {
              enableMetered: true,
              url: downloadUrl,
              filePath: context.filesDir + '/aa.pdf'
            }).then((downloadTask: request.DownloadTask) =>{
              downloadTask.on('fail', (err: number) =>{
                console.error(`Failed to download the task. Code: ${err}`);
              });
              downloadTask.on('progress', (receivedSize: number, totalSize: number) =>{
                console.log('download', "receivedSize:" + (receivedSize / 1024) + " totalSize:" + (totalSize / 1024));
              });
              downloadTask.on('complete', () =>{
                //将文件复制到文件夹中
                const documentSaveOptions = new picker.DocumentSaveOptions(); // 创建文件管理器保存选项实例
                documentSaveOptions.newFileNames = ["aaa.pdf"]; // 保存文件名(可选)
                const documentViewPicker = new picker.DocumentViewPicker;
                documentViewPicker.save(documentSaveOptions)
                  .then(async (documentSaveResult) =>{
                    // 获取到到图片或者视频文件的URI后进行文件读取等操作
                    let uri = documentSaveResult[0];
                    console.info('pub uri:' + uri)
                    // 沙箱路径文件
                    let sanFile = fs.openSync(context.filesDir+ '/aa.pdf', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
                    let pubFile = fs.openSync(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
                    // 将文件从沙箱路拷贝到公共路径
                    fs.copyFileSync(sanFile.fd, pubFile.fd)
                    console.log("-------")
                  })
                console.log('下载完成')
              })}
              // 下载完成
            )
              .catch((err: BusinessError) =>{
                console.error(`Invoke downloadTask failed, code is ${err.code}, message is ${err.message}`);
              });
          } catch (error) {
            let err: BusinessError = error as BusinessError;
            console.error(`Invoke downloadFile failed, code is ${err.code}, message is ${err.message}`);
          }
        })
    }
    .height('100%')
    .width('100%')
  }
}

不需要其他申请权限,有网络权限ohos.permission.INTERNET就可以了。

更多关于HarmonyOS 鸿蒙Next 如何创建一个app可访问的文件夹的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我把文件放到指定文件夹,是否可以通过上述方法直接获取。谢谢,

期待HarmonyOS能在未来带来更多创新的技术和理念。

这个每次都要重新选择,我看了一下,更新了有授权持久化的方法了,我看看是否可以用,感谢回答。

楼主你指的是像NEXT系统的百度网盘那样在Download目录创建一个百度网盘文件夹吗

是的,后续我把视频和音频放到这个文件夹下面,是不是就不用再授权,直接使用了。

自己写一个文件管理软件即可。

在HarmonyOS(鸿蒙)系统中,创建一个应用可访问的文件夹通常涉及文件系统访问权限的管理。以下是如何实现这一点的简要说明:

HarmonyOS提供了沙盒机制来管理应用的文件存储。每个应用都有自己的私有存储区域,位于/data/data/<包名>/目录下。若应用需要访问或创建特定文件夹,应在该私有存储区域内操作。

  1. 确定文件夹路径:首先,确定你希望在应用的私有存储中创建的文件夹路径。例如,可以是一个名为MyFolder的文件夹。

  2. 使用文件API创建文件夹:利用HarmonyOS提供的文件操作API(如File类或其等价物),在应用的私有存储中创建文件夹。这通常涉及调用创建目录的方法,并指定目标路径。

  3. 处理权限:由于操作是在应用的私有存储中进行,通常不需要额外的存储权限。但如果需要访问公共存储或其他应用的存储,则需申请相应权限并处理用户授权。

  4. 访问文件夹:创建成功后,应用即可通过指定路径访问该文件夹,进行文件的读写操作。

请注意,具体的API调用和代码实现可能随HarmonyOS版本而异。建议查阅最新的HarmonyOS开发文档以获取详细信息和示例代码。

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

回到顶部