HarmonyOS rawfile文件拷贝到沙箱目录files下?

要把rawfile文件拷贝到沙箱目录files下,rawfile文件夹下有多个文件,只需要拷贝其中一个文件,但拷贝到沙箱目录files下后,访问该文件发现内容是rawfile下多个文件的内容。原因是什么?

阅读 621
1 个回答

示例参考如下:

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]}`);
    }
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进