一.前言
1.前景提要
DevEcoStudio版本:DevEco Studio 3.1 Release
SDK版本:3.2.2.5
API版本:9
2.概念
在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.日志的保存。
还有许多文件操作的细节和扩展,希望能和大家一起学习,共同进步。
为了能让大家更好的学习鸿蒙 (Harmony OS) 开发技术,这边特意整理了《鸿蒙 (Harmony OS)开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05
《鸿蒙 (Harmony OS)开发学习手册》
入门必看:https://qr21.cn/FV7h05
- 应用开发导读(ArkTS)
- ……
HarmonyOS 概念:https://qr21.cn/FV7h05
- 系统定义
- 技术架构
- 技术特性
- 系统安全
如何快速入门?:https://qr21.cn/FV7h05
- 基本概念
- 构建第一个ArkTS应用
- 构建第一个JS应用
- ……
开发基础知识:https://qr21.cn/FV7h05
- 应用基础知识
- 配置文件
- 应用数据管理
- 应用安全管理
- 应用隐私保护
- 三方应用调用管控机制
- 资源分类与访问
- 学习ArkTS语言
- ……
基于ArkTS 开发:https://qr21.cn/FV7h05
1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……