最近一个项目需要基于沙箱路径下的文件进行操作,奈何应用沙箱路径下没有。找来找去方法都是要把文件推送进去。以下是我的一些拙见,请各位看官老爷指点一二。
沙箱路径
沙箱路径(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%')
}
}
点击“推送”,成功推入!