OpenHarmony源码解析之JavaScript(文件管理API)

网友投稿 327 2023-05-23

[[436543]]

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

1、简介

文件管理在手机、平板、智慧屏等设备上都是一个很重要的功能,通过文件管理相关 API 我们可以实现对指定文件的删除、复制、移动、压缩解压缩等操作。本篇文章通过一个小DEMO来演示该如何使用官方提供的API来实现对指定文件的相关操作。

1.1 OpenHarmony架构图

1.2 文件管理Demo效果演示

2、基础知识

注意:

API Version 6 开始支持。

目前只能对应用私有目录下的文件操作权限,想实现类似文件管理的应用还需等更高权限的开放。

2.1 主要API

2.2 参考资料

HarmonyOS js-apis-fileio( 文件管理)

OpenHarmony js-apis-fileio.md( 文件管理)

3、示例Demo

目前文件管理API支持在手机、平板、智慧屏上调用,暂不支持智能穿戴设备上调用。使用该功能模块对文件/目录进行操作前,需要先获取其绝对路径,获取方式及其接口用法请参考Ability上下文。

3.1 获取Ability上下文

在使用AbilityContext的功能前,需要通过getContext()先获取Context对象。在使用AbilityContext的功能前,需要通过getContext()先获取Context对象。

示例

复制import ability_featureability from@ohos.ability.featureAbility var context = ability_featureability.getContext();    1.2.

3.2 获取应用目录路径

目录类型如下图所示:

“文件/目录绝对路径”=“应用目录路径”+“文件/目录名”,通过上述接口获取到应用目录路径dir,文件名为“xxx.txt”,文件所在绝对路径为:

let path = dir + "xxx.txt";

示例

复制context.getFilesDir()            .then((data) => {                console.info(Cache directory obtained. Data:  + data + "getFilesDir");                this.filePath = data;                this.mDirPath = this.filePath + "/cache_files/"               this.findFile();            }).catch((error) => {            console.error(Failed to obtain the cache directory. Cause: + error.message);        })  1.2.3.4.5.6.7.8.9.

3.3 创建测试文件

在对文件操作之前我们首先创建几个测试文件,通过以下代码就可以成功创建文件

示例

复制createTestFiles() {         for (let i = 0;i < 4; i++) {             file.writeText({                 uri: internal://app//cache_files/ + "file-manager-test" + i + ".txt"                text: Text that just for test. + i,                 success: function () {                     console.log(call writeText success.);                 },                 fail: function (data, code) {                     console.error(call fail callback fail, code:  + code + , data:  + data);                 },             });         }     }  1.2.3.4.5.6.7.8.9.10.11.12.13.14.

3.4 导入文件管理模块

复制import fileio from@ohos.fileio 1.

3.5 获取文件详细信息

以异步方法获取文件信息,使用callback形式返回结果

复制fileio.stat(path, function (err, stat) {          });  1.2.

 以同步方法获取文件的信息

复制let stat = fileio.statSync(path);  1.

 以异步方式为例,我们可以获取到文件的大小等信息,代码如下:

复制let path = that.mDirPath + any[i].uri.substring(index + 1);                        fileio.stat(path, function (err, stat) {                            console.info("Get file stat success:" + "fileSize:" + stat.size +                            "-------" + "fileName:" + any[i].uri.substring(index + 1));                        });  1.2.3.4.5.

 日志截图如下:

3.6 删除文件

以异步方法删除文件,使用callback形式返回结果

复制fileio.unlink(path, function(err) {      if (!err) {          // 文件删除成功      }  });  1.2.3.4.5.

 以同步方法删除文件

复制fileio.unlinkSync(path);  1.

 以异步方式为例,执行文件的删除操作,代码如下:

复制fileio.unlink(filePath, function (err) {              if (!err) {                  prompt.showToast({                      message: "删除成功"                 });               }          });  1.2.3.4.5.6.7.

 通过对比查看删除前后的日志文件可以验证文件删除成功:

3.7 创建文件夹

以异步方法创建目录,使用callback形式返回结果

复制fileio.mkdir(path, function(err) {      if (!err) {          // 创建文件夹成功      }  });  1.2.3.4.5.

 以同步方法创建目录

复制fileio.mkdirSync(path);  1.

以同步创建目录方式,创建dir_test_ 测试文件夹,代码如下:

复制for (let i = 0;i < 4; i++) {                     fileio.mkdirSync(data + "/cache_files/dir_test_" + i);                 }  1.2.3.

 通过日志我们可以验证文件夹创建成功

3.8 文件的复制、移动操作

以异步方法复制文件,使用callback形式返回结果

复制fileio.copyFile(src, dest, function (err) {   });  1.2.

以同步方法复制文件

复制fileio.copyFileSync(src, dest);  1.

src:待复制文件的路径或待复制文件的描述符,dest:目标文件路径或目标文件描述符,具体代码如下:

复制fileio.copyFile(filePath, dest, function (err) {               if(!err){                  prompt.showToast({                      message: "复制成功"                 });              }          });  1.2.3.4.5.6.7.

 通过查询目标路径下面文件信息来验证操作是否成功

文章相关附件可以点击下面的原文链接前往下载

https://harmonyos.51cto.com/resource/1524

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:APISpace 双十一返场 狂欢继续
下一篇:电商狂欢双11,该使用什么API?APISpace给你答案
相关文章

 发表评论

暂时没有评论,来抢沙发吧~