最近一个项目需要基于沙箱路径下的文件进行操作,奈何应用沙箱路径下没有。找来找去方法都是要把文件推送进去。以下是我的一些拙见,请各位看官老爷指点一二。
沙箱路径
沙箱路径(Sandbox Path)通常是指在计算机安全和软件开发中,为应用程序提供的一种隔离环境。这种环境允许程序运行在一个受限的区域中,这样即使程序出现错误或者恶意行为,也不会影响到系统的其他部分。沙箱技术广泛应用于测试、开发以及安全防护等多个领域。

鸿蒙开发中所涉及的沙箱路径请详见官网。
从rawFile到应用沙箱
鸿蒙提供了将rawFile目录下文件推送到沙箱路径的方法:基于getRawFileContentSync()读取文件+fs.writeSync()写文件。
/**
 * 从rawFile向沙箱路径复制文件
 */
static async FromRawToBox(){
    let file = filesDir + "/test.txt";
    // console.info(TAG + file)
    AppInstaller.hapFilePaths = [file]
    fs.access(file).then((res: boolean) => {
      if (res) {
        console.info(TAG + "file exists");
      } else {
        let sss = fs.createStreamSync(file, "w+"); //没有会创建一个空的
        sss.closeSync();
        //获取rawfile下entry-default-signed.hap
        let uint8Array: Uint8Array = context.resourceManager.getRawFileContentSync("test.txt");
        let bf = buffer.from(uint8Array).buffer;
        // 打开文件
        const fsOpen = fs.openSync(file, fs.OpenMode.READ_WRITE | fs.OpenMode.READ_ONLY | fs.OpenMode.CREATE | fs.OpenMode.TRUNC)
        // 写入文件
        let destFile = fs.writeSync(fsOpen.fd, bf);
        console.info(TAG + 'write successfully!')
        // 关闭文件
        fs.close(destFile)
      }
    }).catch((err: BusinessError) => {
      console.error("access failed with error message: " + err.message + ", error code: " + err.code);
    });
}主页面
import { AppInstaller } from '../commont/IntallUtil'
@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  build() {
    Column() {
      Text(this.message)
        .margin({top:200})
        .id('HelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
      Button('推送')
        .type(ButtonType.Capsule)
        .width(100)
        .height(40)
        .fontSize(20)
        .onClick(()=>{
          AppInstaller.FromRawToBox()
        })
    }
    .height('100%')
    .width('100%')
  }
}点击“推送”,成功推入!




















