当前位置: 代码网 > 服务器>服务器>Linux > 鸿蒙开发实战-OpenHarmony沙箱文件

鸿蒙开发实战-OpenHarmony沙箱文件

2024年08月01日 Linux 我要评论
对沙箱文件的操作总体来说较为简单,但要注意和用户文件的区分。常用的对文件的操作场景有:1.文件上传下载,2.文件的遍历与读取,3.日志的保存。还有许多文件操作的细节和扩展,希望能和大家一起学习,共同进步。

在openharmony文件管理模块中,按文件所有者分类分为应用文件和用户文件和系统文件。

1)沙箱文件。也叫做应用文件,包括应用安装文件、应用资源文件、应用缓存文件

二.文件详解

在使用时首先需要导入包 import fs from “@ohos.file.fs”;

在api9之前使用“@ohos.fileio”,api9之后废弃。

1.常用文件路径

沙箱文件的沙箱路径与物理路径对应关系

context属性名称沙箱路径物理路径
filesdir/data/storage/el2/base/haps/entry/files/data/app/el2/100/base//haps/entry/files
cachedir/data/storage/el2/base/haps/entry/cache/data/app/el2/100/base//haps/entry/cache
distributedfilesdir(分布式文件)/data/storage/el2/distributedfiles/mnt/hmdfs/100/account/merge_view/data/
bundlecodedir(应用文件)/data/storage/el1/bundle/data/app/el1/bundle/public/

2.常用文件操作

​ 对于文件的api分为同步和异步的api操作。若在主进程中进行了耗时的文件同步操作,(比如拷贝)会对主进程进行阻塞(一般超过6s就会发生阻塞),此时需要将同步操作改为异步操作或者是新建一个worker进行文件操作。

常用的对文件的操作有以下几个(以同步方法为例,异步方法可在官网查看:):

1)目录的创建和删除

let dirpath =this.context.filesdir + "/testdir";
fs.mkdirsync(dirpath);//创建目录
fs.rmdirsync(dirpath);

2)检查文件是否存在

通过检查文件是否存在再进行下一步操作,避免对文件的误操作

let filepath=this.context.filesdir + "/test.txt";
let res = fs.accesssync(filepath);
if(res){
  console.info("file exists");
} else {
  console.info("file not exists");
}

3)查看文件属性

文件属性主要有:文件名;文件大小;文件的权限。

let stat = fs.statsync(filepath);
console.info("get file info succeed, the stat of file is " + json.stringify(stat));

4)打开和关闭文件

通过打开文件可获得文件的fd,通过文件的fd可以对文件进行拷贝,读写和删除。fs.openmode.read_write | fs.openmode.create表示文件打开的模式以读写的模式打开,不存在则创建。

let file = fs.opensync(filepath, fs.openmode.read_write | fs.openmode.create);
console.info("file fd: " + file.fd);
fs.closesync(file);

5)读写文件

​ 读文件通过一个arraybuffer数据类型的变量来存放数据。有时候需要对数据进行转换unit8array与arraybuffer相互转换。如果在数据传输的过程中出现了乱码的情况可以使用new util.textencoder().encodeinto(s)和new util.textdecoder().decodewithstream(unit8array)进行编码和解码。readsync和readtextsync的区别主要在获取的文件内容为arraybuffer和string。注:有时候当含有很特殊的字符时。readtextsync()无法使用。

写文件可以是字符串也可以是arraybuffer,arraybuffer可以是unit8array的buffer。

读写文件时可配置读写文件的位置,长度及编码。编码目前只支持“utf-8”

//read
let file = fs.opensync(filepath, fs.openmode.read_write);
let buf = new arraybuffer(stat.size);
fs.readsync(file.fd, buf);
fs.closesync(file);

//write
let file = fs.opensync(filepath, fs.openmode.read_write | fs.openmode.create);
let options={ offset: fs.statsync(filepath).size,length:length,encoding:"utf-8" }
let str: string = "hello, world"+"\n"+"hello,openharmony";
let writelen = fs.writesync(file.fd, str,options);
console.info("write data to file succeed and size is:" + writelen);
fs.closesync(file);

//readtext
class option {
  offset: number = 0;
  length: number = 0;
  encoding: string = 'utf-8';
}
let stat = fs.statsync(filepath);
let option = new option();
option.offset = 1;
option.length = stat.size;
let str = fs.readtextsync(filepath, option);
console.info("readtext succeed:" + str);

6)文件拷贝

在使用文件拷贝的时候,可以srcpath也可以使用fd,可对用户文件(媒体文件)进行使用。

let srcpath = pathdir + "/srcdir/test.txt";
let dstpath = pathdir + "/dstdir/test.txt";
fs.copyfilesync(srcpath, dstpath);

7)文件列表

在对文件夹下的列表进行遍历的时候可进行条件过滤。过滤条件可以是后缀,名称,大小和时间。

class listfileoption {
  public recursion: boolean = false;
  public listnum: number = 0;
  public filter: filter = {};
}
let option = new listfileoption();
option.filter.suffix = [".png", ".jpg", ".jpeg"];
option.filter.displayname = ["*abc", "efg*"];
option.filter.filesizeover = 1024;
option.filter.lastmodifiedafter = new date().gettime();
let filenames = fs.listfilesync(pathdir, option);
console.info("listfile succeed");
for (let i = 0; i < filenames.length; i++) {
  console.info("filename: %s", filenames[i]);
}

8)文件删除

fs.unlinksync(filepath);

三.常用文件操作shell命令

在devecostudio4.0之前是没有devicefilebrowser的,对于文件的shell命令也需要熟悉。

文件操作的常用shell命令:

创建文件夹:mkdir test

添加文件:touch file.txt

写入内容:echo abc>file.txt

查看内容:cat file.txt

查看文件的属性信息:ls -l file.txt

授权: chmod -r 777 [目录/文件]

删除文件:rm file.txt

删除文件夹:rm rr test

查看当前所在的目录:pwd

查找文件 :find -name 【/目录】 “文件名”

接收文件:hdc file recv “设备要导出的文件” “电脑存放文件目录”

推送文件:hdc file send “要推送的文件” “设备目录”

注意:有时候推送了文件进了设备,但是对文件操作报权限错误,需要对文件进行授权。

四.总结

对沙箱文件的操作总体来说较为简单,但要注意和用户文件的区分。

常用的对文件的操作场景有:1.文件上传下载,2.文件的遍历与读取,3.日志的保存。

还有许多文件操作的细节和扩展,希望能和大家一起学习,共同进步。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com