HarmonyOS NEXT鸿蒙开发:读取 rawfile 目录下的文本文件(resourceManager、getRawFileContentSync、getRawFileContent)

说明

读取 src/main/resources/rawfile 目录下的文本文件内容,目录结构如下:

前提

必须是模拟器、真机运行,不能在预览模式下测试

相关API

@ohos.resourceManager

官网解释

资源管理模块,根据当前configuration:语言、区域、横竖屏、Mcc(移动国家码)和Mnc(移动网络码)、Device capability(设备类型)、Density(分辨率)提供获取应用资源信息读取接口

获取

从API Version9开始,Stage模型通过context获取resourceManager对象的方式后,可直接调用其内部获取资源的接口,无需再导入包

const context = getContext() as common.UIAbilityContext;
context.resourceManager

getRawFileContentSync

官网解释

用户获取 resources/rawfile 目录下对应的 rawfile 文件内容,使用 同步 形式返回。

**元服务API:**从API version 11开始,该接口支持在元服务中使用

getRawFileContentSync(path: string): Uint8Arra

参数:

  • path:类型:string,必填,rawfile文件路径。

返回值: 类型:Uint8Array,返回获取的rawfile文件内容,相当于字节数组

错误:

  • 401:If the input parameter invalid. Possible causes: Incorrect parameter types.

  • 9001005:Invalid relative path.

getRawFileContent()

案例

引入库

import common from '@ohos.app.ability.common';
import util from '@ohos.util';

实现方式一

按钮、点击事件代码
Text("生活")
  .fontSize(20)
  .onClick( e=>{
    try{
      const content = this.readRawfile("test2.txt")
      console.error("内容:",content)
    } catch (error) {
      console.error(`error:${JSON.stringify(error)}`,error.code,error.message)
      const err = error as BusinessError
      console.error(`getRawFileContentSync 发生错误: ${err.code}, message: ${err.message}.`);
    }
  })
读取代码

使用 getRawFileContentSync

readRawfile(file:string) {
  const context = getContext() as common.UIAbilityContext;
  const arr = context.resourceManager.getRawFileContentSync(file)
  let textDecoder = util.TextDecoder.create('utf-8', { ignoreBOM: true });
  const content = textDecoder.decodeToString(arr, { stream: false })
  return content
}

实现方式二

按钮、点击事件代码
Text("生活")
  .fontSize(20)
  .onClick( e=>{
    this.readRawfile()

  })
读取代码

读取文件内容的 getRawFileContent() 方法返回Promise,是异步的,搭配 async、await 成为同步

async readRawfile() {
  let context = getContext() as common.UIAbilityContext;
  try {
    // 读取文件内容,字节数组
    const rawFile = await context.resourceManager.getRawFileContent("test.txt")
    // 工具类,将字节数组解码为字符串,通过 create() 静态方法创建对象,需要指定字符集
    const textDecoder = util.TextDecoder.create('utf-8', { ignoreBOM: true });
    // 将字节数组解码为字符串
    const result = textDecoder.decodeToString(rawFile, { stream: false })
    console.info(`content:${result}`)
  } catch (error) {
    console.error(`error:${JSON.stringify(error)}`,error.code,error.message)
    const err = error as BusinessError
    console.error(`getRawFileContentSync 发生错误: ${err.code}, message: ${err.message}.`);
  }
}

关于 util.TextDecoder 类详见 官网

参考:
https://blog.youkuaiyun.com/shaodong1123/article/details/142100916

https://blog.youkuaiyun.com/m0_64422261/article/details/139424001

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值