HarmonyOS基础:鸿蒙如何获取到 resources/rawfile下文件内容

大家好!我是黑臂麒麟(起名原因:一个出生右臂自带纹身的高质量程序员😏),也是一位6+(约2个半坤年)的前端;
学习如像练武一样,理论和实践要相结合;
如需深究可前往高级ArkTS系列课程;
望对学习鸿蒙小伙伴有所帮助;

开发鸿蒙项目中,遇到获取resources/rawfile目录下文件内容问题。记录下来,希望对学习鸿蒙的小伙伴有所帮助。

获取方式一

getRawFileContent(9+)

getRawFileContent(path: string, callback: AsyncCallback): void
用户获取resources/rawfile目录下对应的rawfile文件内容,使用callback异步回调。

参数:

参数名类型必填说明
pathstringrawfile文件路径
callbackAsyncCallback返回获取的rawfile文件内容

错误码:

错误码ID错误信息
401If the input parameter invalid. Possible causes: Incorrect parameter types.

示例:

我们获取rawfile文件下的

// Data.json文件
[
  {
    "id": 1,
    "imageSrc": "app.media.enablement_pic1",
    "title": "HarmonyOS第一课",
    "brief": "基于真实的开发场景,提供向导式学习,多维度融合课程等内容,给开发者提供全新的学习体验。",
    "webUrl": "https://developer.huawei.com/consumer/cn/doc/harmonyos-video-courses/video-tutorials-0000001443535745"
  },
]
import { util } from '@kit.ArkTS'
import { BusinessError } from '@kit.BasicServicesKit';
 
 export class ArticleClass {
  id: string = '';
  imageSrc: string = '';
  title: string = '';
  brief: string = '';
  webUrl: string = '';

  constructor(id: string, imageSrc: string, title: string, brief: string, webUrl: string) {
    this.id = id;
    this.imageSrc = imageSrc;
    this.title = title;
    this.brief = brief;
    this.webUrl = webUrl;
  }
}


@Component 
export struct GetRawfile { 
  @State enablementList: Array<ArticleClass> = []
 
  aboutToAppear(): void {
  	try {
  		// 这里利用getContext(this).resourceManager的getRawFileContent获取文件内容
	    getContext(this).resourceManager.getRawFileContent('test.txt', (_err, value) => { 
	      let textDecoder = util.TextDecoder.create('utf-8', {
		    ignoreBOM: true
		  })
		  let resultPut = textDecoder.decodeToString(value);
		  this.enablementList = JSON.parse(resultPut) as ArticleClass[];
	    }); 
	} catch (error) {
		// 错误处理
		let code = (error as BusinessError).code;
		let message = (error as BusinessError).message;
		console.error(`callback getRawFileContent failed, error code: ${code}, message: ${message}.`);
	}
  } 
 
  build() { 
    RelativeContainer() { 
      Text(this.message) 
        .id('RawfileHelloWorld') 
        .fontSize(50) 
        .fontWeight(FontWeight.Bold) 
        .alignRules({ 
          center: { anchor: '__container__', align: VerticalAlign.Center }, 
          middle: { anchor: '__container__', align: HorizontalAlign.Center } 
        }) 
    } 
    .height('100%') 
    .width('100%') 
  } 
}

获取方式二

getRawFileContent(9+)

getRawFileContent(path: string): Promise
用户获取resources/rawfile目录下对应的rawfile文件内容,使用Promise异步回调。

参数:

参数名类型必填说明
pathstringrawfile文件路径。

返回值:

参数名说明
Promiserawfile文件内容。

错误码:

参数名错误信息
401If the input parameter invalid. Possible causes: Incorrect parameter types.
9001005Invalid relative path.

示例:

import { BusinessError } from '@kit.BasicServicesKit';

try {
  this.context.resourceManager.getRawFileContent("test.txt").then((value: Uint8Array) => {
    let rawFile = value;
  }).catch((error: BusinessError) => {
    console.error("getRawFileContent promise error is " + error);
  });
} catch (error) {
  let code = (error as BusinessError).code;
  let message = (error as BusinessError).message;
  console.error(`promise getRawFileContent failed, error code: ${code}, message: ${message}.`);
}

总结

以上两种方式任选其一, 都可以获取resource/rawfile文件夹下的文件内容.个人前端,习惯方式二。希望文章对小伙伴们有帮助。

结语

本篇文章的内容结束了。文章有不对或不完整的地方,望多指点;
望更多小伙伴们加入harmonyOS开发大家庭,壮大生态圈,让鸿蒙更好,让国产手机(物联网)系统更强大。
鸿蒙5.0已经在公测了。和小伙伴一起加油,鸿蒙不仅仅应用开发系统。也会在物联网等领域大展拳脚。鸿蒙之父说:“手机端只是鸿蒙的5%的潜能。应用开发只是第一步,还有更多潜能供我们发觉开发"。
如对你学习有所帮助,希望可爱你动动小手,关注、点赞、收藏;

<think>好的,用户需要一段在鸿蒙5.0中使用ArkTS播放指定路径音乐的代码示例。首先,我得确认鸿蒙ArkTS框架中用于音频播放的API。记得HarmonyOS通常使用`AVPlayer`来进行媒体播放,所以需要检查当前版本的文档是否有所变化。 接下来,用户提供的路径是`D:\huawei\Project2\entry\src\main\resources\rawfile`,这看起来像是开发环境中的本地路径。但鸿蒙应用中,资源文件通常放在`rawfile`目录下,打包后这些文件会被包含在应用中。因此,代码中应该使用相对路径,比如`$rawfile('music.mp3')`来引用资源。 然后,考虑如何在ArkTS中实现播放功能。需要导入相关的模块,比如`@ohos.multimedia.media`,然后创建AVPlayer实例。配置数据源时,应该使用资源管理器的路径,而不是绝对路径。同时,需要处理播放状态的回调,比如准备完成时开始播放,以及错误处理。 还要注意权限问题,虽然访问本地资源可能不需要网络权限,但最好在配置文件中声明必要的权限,比如`ohos.permission.READ_MEDIA`,确保应用有权读取文件。 另外,用户可能希望有一个简单的界面,比如一个播放按钮,所以需要在UI部分添加按钮并绑定点击事件来触发播放。同时,生命周期管理也很重要,在页面销毁时释放播放器资源,避免内存泄漏。 最后,验证代码的正确性,确保路径正确,语法符合ArkTS规范,并处理可能的异常情况。可能需要提醒用户将音乐文件放在正确的`rawfile`目录下,并检查文件名是否正确,避免运行时错误。</think>在鸿蒙5.0中使用ArkTS实现本地音乐播放,需要按照以下步骤操作: ```typescript // 导入媒体模块 import media from '@ohos.multimedia.media'; import { BusinessError } from '@ohos.base'; @Entry @Component struct MusicPlayer { // 创建AVPlayer实例 avPlayer: media.AVPlayer = media.createAVPlayer(); aboutToAppear() { // 设置播放源(重点处理rawfile路径) let fdPath = 'entry/src/main/resources/rawfile/music.mp3'; // 实际使用应通过资源管理器获取 this.avPlayer.url = fdPath; // 注册准备完成回调 this.avPlayer.on('stateChange', async (state: string) => { if (state === 'prepared') { this.avPlayer.play(); // 自动开始播放 } }); // 注册错误回调 this.avPlayer.on('error', (err: BusinessError) => { console.error(`播放错误: code: ${err.code}, message: ${err.message}`); }); } // 界面布局 build() { Column() { Button('播放音乐') .onClick(() => { this.avPlayer.prepare(); // 手动触发准备 }) } .width('100%') .height('100%') } aboutToDisappear() { this.avPlayer.release(); // 释放资源 } } ``` 注意三个关键点: 1. 文件路径需要放在`entry/src/main/resources/rawfile/`目录下,打包后路径会自动处理[^1] 2. 需要配置权限:在`module.json5`中添加: ```json "requestPermissions": [ { "name": "ohos.permission.READ_MEDIA" } ] ``` 3. 实际工程中建议使用资源管理器获取精确路径: ```typescript import resourceManager from '@ohos.resourceManager'; const context = getContext(this); const fileDescriptor = await context.resourceManager.getRawFd('music.mp3'); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值