请问 HarmonyOS 鸿蒙Next 怎么复制resources/rawfile文件下的文件到沙箱目录下 请问怎么获取系统声音文件的uri

1,HarmonyOS 鸿蒙Next:请问怎么复制resources/rawfile文件下的文件到沙箱目录下
2,HarmonyOS 鸿蒙Next:请问怎么获取系统声音文件的uri

1,请问怎么复制resources/rawfile文件下的文件到沙箱目录下。2,请问怎么获取系统声音文件的uri

2 回复
import util from '@ohos.util';
import { BusinessError } from '@ohos.base';
import common from '@ohos.app.ability.common';
import fs, { ListFileOptions, ReadOptions } from '@ohos.file.fs';
import buffer from '@ohos.buffer';

@Entry
@Component
struct Page2 {
  @State data: string = ''
  context = getContext(this) as common.UIAbilityContext;

  build() {
    Column() {

      Button('1、获取rawfile目录下test.txt数据')
        .onClick(() => {
          this.getRawFileData()
        })

      Button('2、data数据写入沙箱文件')
        .onClick(() => {
          this.writeData()
        })
      Button('3、读取沙箱文件数据')
        .onClick(() => {
          this.readData()
        })
      Button('4、获取沙箱文件列表')
        .onClick(() => {
          this.getListFile()
        })
    }
  }

  getRawFileData() {
    try {
      //将test.txt文件放入rawfile文件夹下
      this.context.resourceManager.getRawFileContent("test.txt", (error: BusinessError, value: Uint8Array) => {
        if (error != null) {
          console.error("error is " + error);
        } else {
          let rawFile = value;
          console.log(`获取的test的内容是:${rawFile}`)
          //Uint8Array转string
          let textDecoder: util.TextDecoder = util.TextDecoder.create();
          // 设置编码格式为“utf-8”
          //let textDecoder = util.TextDecoder.create('utf-8', { ignoreBOM: true });
          //rawFile转string
          this.data = textDecoder.decodeWithStream(rawFile);
          console.log(`输出string格式内容输出:${this.data}`)
        }
      });
    } catch (error) {
      let code = (error as BusinessError).code;
      let message = (error as BusinessError).message;
      console.error(`callback getRawFileContent failed, error code: ${code}, message: ${message}.`);
    }
  }

  writeData() {
    // 获取应用文件路径
    let context = getContext(this) as common.UIAbilityContext;
    let filesDir = context.filesDir;
    let filePath = filesDir + '/test.txt'
    console.log(`沙箱filePath的路径是:${filePath}`)
    // 新建并打开文件
    let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
    // 写入一段内容至文件,即将上述的data数据内容写入沙箱路径下的test文件
    let writeLen = fs.writeSync(file.fd, this.data);
    // 关闭文件
    fs.closeSync(file);
  }

  //读取沙箱文件数据
  readData(){
    // 获取应用文件路径
    let context = getContext(this) as common.UIAbilityContext;
    let filesDir = context.filesDir;
    let filePath = filesDir + '/test.txt'
    let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);

    // 从文件读取一段内容
    let arrayBuffer = new ArrayBuffer(4096);
    let readOptions: ReadOptions = {
      offset: 0,
      length: arrayBuffer.byteLength
    };
    let readLen = fs.readSync(file.fd, arrayBuffer, readOptions);
    let buf = buffer.from(arrayBuffer, 0, readLen);
    console.info("沙箱下test文件内容输出: " + buf.toString());
    // 关闭文件
    fs.closeSync(file);
  }

  // 查看沙箱文件列表
  getListFile(): void {
    // 获取应用文件路径
    let context = getContext(this) as common.UIAbilityContext;
    let filesDir = context.filesDir;
    console.log('查看文件列表:' + filesDir)
    let listFileOption: ListFileOptions = {
      recursion: false,
      listNum: 0,
      filter: {
        suffix: [".png", ".jpg", ".txt"],
        displayName: ["test*"],
        fileSizeOver: 0,
        lastModifiedAfter: new Date(0).getTime()
      }
    };
    let files = fs.listFileSync(filesDir, listFileOption);
    for (let i = 0; i < files.length; i++) {
      console.info(`The name of file: ${files[i]}`);
    }
  }
}

更多关于请问 HarmonyOS 鸿蒙Next 怎么复制resources/rawfile文件下的文件到沙箱目录下 请问怎么获取系统声音文件的uri的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


1,HarmonyOS 鸿蒙Next:在HarmonyOS中,要将resources/rawfile目录下的文件复制到沙箱目录下,你可以使用文件访问API。首先,通过RawFileDescriptor类获取resources/rawfile文件的描述符,然后使用FileIO类读取文件内容,并写入到沙箱目录中的目标文件。注意,你需要有相应的文件读写权限。示例代码如下:

RawFileDescriptor rawFileDescriptor = ...; // 获取rawfile文件描述符
FileIO fileIO = FileIO.open(rawFileDescriptor, "r");
byte[] buffer = new byte[1024];
FileOutputStream fos = new FileOutputStream(context.getFilesDir() + "/targetFile");
int bytesRead;
while ((bytesRead = fileIO.read(buffer)) != -1) {
    fos.write(buffer, 0, bytesRead);
}
fos.close();
fileIO.close();

2,HarmonyOS 鸿蒙Next:要获取系统声音文件的URI,通常你需要通过系统的Content Provider访问媒体库。然而,直接访问系统声音文件的URI可能受限于系统权限和安全策略。你可以尝试使用MediaStore查询系统声音文件,但需要注意权限和API限制。如果无法直接获取,可能需要通过系统API或特定接口请求这些资源。

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

回到顶部