|
|
|
|
公众号矩阵

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

文件管理在手机、平板、智慧屏等设备上都是一个很重要的功能,通过文件管理相关 API 我们可以实现对指定文件的删除、复制、移动、压缩解压缩等操作。

作者:开鸿HarmonyOS来源:鸿蒙社区|2021-11-25 09:54

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

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

https://harmonyos.51cto.com

1、简介

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

1.1 OpenHarmony架构图

 OpenHarmony 源码解析之JavaScript(文件管理API)-鸿蒙HarmonyOS技术社区

1.2 文件管理Demo效果演示

2、基础知识

注意:

API Version 6 开始支持。

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

2.1 主要API

 OpenHarmony 源码解析之JavaScript(文件管理API)-鸿蒙HarmonyOS技术社区

2.2 参考资料

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

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

3、示例Demo

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

3.1 获取Ability上下文

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

示例

  1. import ability_featureability from '@ohos.ability.featureAbility' 
  2. var context = ability_featureability.getContext();   

3.2 获取应用目录路径

目录类型如下图所示:

 OpenHarmony 源码解析之JavaScript(文件管理API)-鸿蒙HarmonyOS技术社区

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

let path = dir + "xxx.txt";

示例

  1. context.getFilesDir() 
  2.           .then((data) => { 
  3.               console.info('Cache directory obtained. Data: ' + data + "getFilesDir"); 
  4.               this.filePath = data; 
  5.               this.mDirPath = this.filePath + "/cache_files/"
  6.               this.findFile(); 
  7.           }).catch((error) => { 
  8.           console.error('Failed to obtain the cache directory. Cause:' + error.message); 
  9.       }) 

3.3 创建测试文件

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

示例

  1. createTestFiles() { 
  2.        for (let i = 0;i < 4; i++) { 
  3.            file.writeText({ 
  4.                uri: 'internal://app//cache_files/' + "file-manager-test" + i + ".txt"
  5.                text: 'Text that just for test.' + i, 
  6.                success: function () { 
  7.                    console.log('call writeText success.'); 
  8.                }, 
  9.                fail: function (data, code) { 
  10.                    console.error('call fail callback fail, code: ' + code + ', data: ' + data); 
  11.                }, 
  12.            }); 
  13.        } 
  14.    } 

3.4 导入文件管理模块

  1. import fileio from '@ohos.fileio'

3.5 获取文件详细信息

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

  1. fileio.stat(path, function (err, stat) {     
  2.     }); 

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

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

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

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

日志截图如下:

 OpenHarmony 源码解析之JavaScript(文件管理API)-鸿蒙HarmonyOS技术社区

3.6 删除文件

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

  1. fileio.unlink(path, function(err) { 
  2.     if (!err) { 
  3.         // 文件删除成功 
  4.     } 
  5. }); 

以同步方法删除文件

  1. fileio.unlinkSync(path); 

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

  1. fileio.unlink(filePath, function (err) { 
  2.             if (!err) { 
  3.                 prompt.showToast({ 
  4.                     message: "删除成功" 
  5.                 });  
  6.             } 
  7.         }); 

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

 OpenHarmony 源码解析之JavaScript(文件管理API)-鸿蒙HarmonyOS技术社区

3.7 创建文件夹

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

  1. fileio.mkdir(path, function(err) { 
  2.     if (!err) { 
  3.         // 创建文件夹成功 
  4.     } 
  5. }); 

以同步方法创建目录

  1. fileio.mkdirSync(path); 

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

  1. for (let i = 0;i < 4; i++) { 
  2.                    fileio.mkdirSync(data + "/cache_files/dir_test_" + i); 
  3.                } 

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

 OpenHarmony 源码解析之JavaScript(文件管理API)-鸿蒙HarmonyOS技术社区

3.8 文件的复制、移动操作

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

  1. fileio.copyFile(src, dest, function (err) {  
  2. }); 

以同步方法复制文件

  1. fileio.copyFileSync(src, dest); 

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

  1. fileio.copyFile(filePath, dest, function (err) { 
  2.              if(!err){ 
  3.                 prompt.showToast({ 
  4.                     message: "复制成功" 
  5.                 }); 
  6.             } 
  7.         }); 

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

 OpenHarmony 源码解析之JavaScript(文件管理API)-鸿蒙HarmonyOS技术社区

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

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

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

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

https://harmonyos.51cto.com

【编辑推荐】

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区
  2. 打造一款定制化鸿蒙发行版
  3. 鸿蒙开源第三方组件—SwipeCaptcha_ohos3.0旋转验证组件
  4. OpenHarmony源码解析之安全子系统 (应用权限管理)
  5. HarmonyOS ArkUI之自定义组件侧滑菜单(JS)
  6. 手把手教你低代码开发鸿蒙应用UI
【责任编辑:jianghua TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

带你轻松入门 RabbitMQ

带你轻松入门 RabbitMQ

轻松入门RabbitMQ
共4章 | loong576

57人订阅学习

数据湖与数据仓库的分析实践攻略

数据湖与数据仓库的分析实践攻略

助力现代化数据管理:数据湖与数据仓库的分析实践攻略
共3章 | 创世达人

14人订阅学习

云原生架构实践

云原生架构实践

新技术引领移动互联网进入急速赛道
共3章 | KaliArch

42人订阅学习

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微