
基于ArkTS语言的OpenHarmony APP应用开发:文件操作 原创
1、程序介绍
本示例主要展示了文件操作相关的功能,实现了打开文件、关闭文件、写入和读取、压缩和解压文件等功能。
本案例已在OpenHarmony凌蒙派-RK3568开发板验证通过,具体代码可参考:https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk3568-openharmony/tree/master/samples/d10_FileOperator#ui
API版本:9
2、知识准备
2.1、fs模块
该模块为基础文件操作API,提供基础文件操作能力,包括文件基本管理、文件目录管理、文件信息统计、文件流式读写等常用功能。
注意:该模块从API Version 9开始支持。
2.1.1、导入模块
2.1.2、fs.open
系统能力:SystemCapability.FileManagement.File.FileIO
其中,参数定义如下:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
path | string | 是 | 文件的应用沙箱路径或文件URI |
mode | number | 否 | 打开文件的选项,必须指定如下选项中的一个,默认以只读方式打开: - OpenMode.READ_ONLY(0o0):只读打开。 - OpenMode.WRITE_ONLY(0o1):只写打开。 - OpenMode.READ_WRITE(0o2):读写打开。 给定如下功能选项,以按位或的方式追加,默认不给定任何额外选项: - OpenMode.CREATE(0o100):若文件不存在,则创建文件。 - OpenMode.TRUNC(0o1000):如果文件存在且以只写或读写的方式打开文件,则将其长度裁剪为零。 - OpenMode.APPEND(0o2000):以追加方式打开,后续写将追加到文件末尾。 - OpenMode.NONBLOCK(0o4000):如果path指向FIFO、块特殊文件或字符特殊文件,则本次打开及后续 IO 进行非阻塞操作。 - OpenMode.DIR(0o200000):如果path不指向目录,则出错。 - OpenMode.NOFOLLOW(0o400000):如果path指向符号链接,则出错。 - OpenMode.SYNC(0o4010000):以同步IO的方式打开文件。 |
其中,返回值定义如下:
类型 | 说明 |
---|---|
Promise<File> | Promise对象。返回File对象。 |
File | 打开的File对象。 |
2.1.3、fs.close
系统能力:SystemCapability.FileManagement.File.FileIO
其中,参数定义如下:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
file | File | number | 是 | 已打开的File对象或已打开的文件描述符fd。 |
callback | AsyncCallback<void> | 是 | 异步关闭文件之后的回调。 |
2.1.4、fs.write
系统能力:SystemCapability.FileManagement.File.FileIO
其中,参数定义如下:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
fd | number | 是 | 已打开的文件描述符fd。 |
buffer | ArrayBuffer | string | 是 | 待写入文件的数据,可来自缓冲区或字符串。 |
options | Object | 否 | 支持如下选项: - offset,number类型,表示期望写入文件的位置。可选,默认从当前位置开始写。 - length,number类型,表示期望写入数据的长度。可选,默认缓冲区长度。 - encoding,string类型,当数据是string类型时有效,表示数据的编码方式,默认 ‘utf-8’。当前仅支持 ‘utf-8’。 |
callback | AsyncCallback<number> | 是 | 异步将数据写入完成后执行的回调函数。 |
其中,返回值定义如下:
类型 | 说明 |
---|---|
Promise<number> | Promise对象。返回实际写入的长度。 |
number | 实际写入的长度 |
2.1.5、fs.read
系统能力:SystemCapability.FileManagement.File.FileIO
其中,参数定义如下:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
fd | number | 是 | 已打开的文件描述符。 |
buffer | ArrayBuffer | 是 | 用于保存读取到的文件数据的缓冲区。 |
options | Object | 否 | 支持如下选项: - offset,number类型,表示期望读取文件的位置。可选,默认从当前位置开始读。 - length,number类型,表示期望读取数据的长度。可选,默认缓冲区长度。 |
其中,返回值定义如下:
类型 | 说明 |
---|---|
Promise<number> | Promise对象。返回读取的结果。 |
number | 实际读取的长度 |
2.1.6、fs.close
系统能力:SystemCapability.FileManagement.File.FileIO
其中,参数定义如下:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
file | File|number | 是 | 已打开的File对象或已打开的文件描述符fd。 |
callback | AsyncCallback<void> | 是 | 异步关闭文件之后的回调。 |
其中,返回值定义如下:
2.1.7、fs.stat
系统能力:SystemCapability.FileManagement.File.FileIO
其中,参数定义如下:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
file | string|number | 是 | 文件应用沙箱路径path或已打开的文件描述符fd。 |
callback | AsyncCallback<Stat> | 是 | 异步获取文件的信息之后的回调。 |
其中,返回值定义如下:
类型 | 说明 |
---|---|
Promise<Stat> | Promise对象。返回文件的具体信息。 |
Stat | 表示文件的具体信息。 |
2.1.8、fs.unlink
系统能力:SystemCapability.FileManagement.File.FileIO
其中,参数定义如下:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
path | string | 是 | 文件的应用沙箱路径。 |
callback | AsyncCallback<void> | 是 | 异步删除文件之后的回调。 |
2.2、zlib模块
本模块提供压缩解压缩文件的能力。
本模块首批接口从API version 7开始支持。
2.2.1、导入模块
2.2.2、zlib.zipFile
系统能力: SystemCapability.BundleManager.Zlib
其中,参数定义如下:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
inFile | string | 是 | 指定压缩的文件夹路径或者文件路径,路径必须为沙箱路径,沙箱路径可以通过context获取。 |
outFile | string | 是 | 指定压缩结果的文件路径(文件的扩展名zip)。 |
options | Options | 是 | 压缩的可选参数。 |
其中,返回值定义如下:
类型 | 说明 |
---|---|
Promise<void> | ERROR_CODE_OK:压缩成功; ERROR_CODE_ERRNO:压缩失败。 |
2.2.3、zlib.unzipFile
系统能力: SystemCapability.BundleManager.Zlib
其中,参数定义如下:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
inFile | string | 是 | 指定的待解压缩文件的文件路径,路径必须为沙箱路径,沙箱路径可以通过context获取。 |
outFile | string | 是 | 指定的解压文件路径。 |
options | Options | 是 | 解压的可选参数。 |
其中,返回值定义如下:
类型 | 说明 |
---|---|
Promise<void> | ERROR_CODE_OK:解压成功; ERROR_CODE_ERRNO:解压失败返回执行结果。 |
3、程序解析
3.1、获取APP文件存储路径
使用getContext().filesDir获取APP文件存储路径,使用getContext().cacheDir获取缓存存储路径。具体代码如下:
3.2、文件操作
通过调用fs模块的相应接口对文件进行读写操作。具体代码如下所示:
3.3、压缩解压操作
通过zlib模块对文件进行压缩解压操作。具体代码如下所示:
4、项目编译
4.1、打开项目
打开DevEco Studio,再打开自定义通知项目。
4.2、编译程序
点击菜单栏上的“Build” -> “Rebuild Project”。如果出现无法编译,则注意查看Event Log界面。如下所示:
点击Run 'npm install'
,让DevEco Studio安装相关依赖包。
重新点击菜单栏上的“Build” -> “Rebuild Project”。出现如下错误:
点击上图红色框部分,安装相关服务。
重新点击菜单栏上的“Build” -> “Rebuild Project”,编译成功。
4.3、安装程序
点击“entry”按钮,将项目程序安装到设备端。如下图所示:
如果出现下述报错,表示无法安装。如图所示:
点击上图红色框的蓝色字体,弹出"Project Structure"对话框,点击"Apply",再点击"OK"。如图所示:
重新点击“entry”按钮,将项目程序安装到设备端。
5、运行结果
