一个使用HarmonyOS FilePicker 选择文件的简单实例

在HarmonyOS应用开发中,使用 FilePicker 选择文件并保存选择是一个常见的功能。以下是一个更完整的示例,展示了如何实现这个功能,包括权限申请、文件选择、文件保存等步骤。

权限申请

在HarmonyOS中,您需要先在应用的配置文件中声明所需的权限。例如,如果您需要读取和写入用户文件,您需要在 manifest.json 文件中声明这些权限。

{
  "permissions": [
    {
      "name": "ohos.permission.READ_USER_FILE",
      "description": "用于读取用户文件"
    },
    {
      "name": "ohos.permission.WRITE_USER_FILE",
      "description": "用于写入用户文件"
    }
  ]
}

选择文件并保存路径

接下来,在组件中实现文件选择逻辑。

import { Component } from '@hapiee/arkui';
import { View, Text, Picker, TextField, Button, ScrollView } from '@hapiee/arkui';
import { FilePicker } from '@ohos.file.picker';
import { File } from '@ohos.filemanager';

@Component
export default class FilePickerExample {
  @State selectedFile: string;
  @State savedFile: string;

  constructor() {
    this.selectedFile = '';
    this.savedFile = '';
  }

  private async selectFile() {
    const filePicker = new FilePicker();
    filePicker.select({
      mimeTypes: ['application/pdf', 'application/doc', 'application/txt'], // 指定可选文件类型
    }).then((result) => {
      if (result && result.length > 0) {
        this.selectedFile = result[0]; // 选择文件后的处理逻辑
      }
    }).catch((err) => {
      console.error('FilePicker error:', err);
    });
  }

  private async saveFile() {
    const file = new File();
    const savePath = '/data/data/com.example.app/files/'; // 指定保存路径

    try {
      await file.createDir(savePath, { recursive: true }); // 创建文件夹
      const filePath = savePath + 'saved_file.txt'; // 指定文件名
      await file.writeFile(filePath, this.selectedFile); // 写入文件
      this.savedFile = filePath; // 保存文件路径
    } catch (e) {
      console.error('File save error:', e);
    }
  }

  build() {
    return (
      <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
        <TextField
          value={this.selectedFile}
          onChange={(e) => { this.selectedFile = e.value; }}
        />
        <Button
          onClick={() => this.selectFile()}
          text="选择文件"
        />
        <Button
          onClick={() => this.saveFile()}
          text="保存文件"
        />
        {this.savedFile && (
          <Text style={{ marginTop: 20 }}>保存的文件路径: {this.savedFile}</Text>
        )}
      </View>
    );
  }
}

在这个扩展的例子中,我们添加了一个新的按钮“保存文件”,当用户点击这个按钮时,saveFile 方法会被调用。这个方法首先创建一个文件夹来保存文件,然后使用 File API 将用户选择的文件内容写入到一个新的文件中。

请注意,为了运行这个例子,您需要确保已经正确申请了必要的用户权限,特别是写入文件权限。此外,文件路径和文件名是硬编码的,您可以根据需要修改这些值。

这个例子展示了如何使用HarmonyOS的文件系统和 FilePicker API来选择文件并保存到应用的文件目录中。在实际应用中,您可能需要更复杂的逻辑来处理不同类型的文件和更高级的文件操作。

posted @   多见多闻  阅读(148)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2023-06-25 github.com 打不开的准确方法
点击右上角即可分享
微信分享提示