OpenHarmony 源码解析之JavaScript(文件管理API) 原创 精华

深开鸿
发布于 2021-11-24 11:19
浏览
11收藏

作者:汪刚

1 简介

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

1.1 UI架构相关系列

【OpenHarmony 源码解析之ACE (JavaScript运行环境初始化)】

【OpenHarmony 源码解析之JavaScript API框架(NAPI)】

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

1.2 OpenHarmony架构图

 OpenHarmony 源码解析之JavaScript(文件管理API)-鸿蒙开发者社区

1.3 文件管理Demo效果演示

 OpenHarmony 源码解析之JavaScript(文件管理API)-鸿蒙开发者社区

2 基础知识

注意:

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

2.1 主要API

 OpenHarmony 源码解析之JavaScript(文件管理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();	

3.2 获取应用目录路径

  • 目录类型如下图所示:
     OpenHarmony 源码解析之JavaScript(文件管理API)-鸿蒙开发者社区

  • “文件/目录绝对路径”=“应用目录路径”+“文件/目录名”,通过上述接口获取到应用目录路径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);
      })

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);
               },
           });
       }
   }

3.4 导入文件管理模块

import fileio from '@ohos.fileio';

3.5 获取文件详细信息

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

    fileio.stat(path, function (err, stat) {    
    	});
    
  • 以同步方法获取文件的信息

    let stat = fileio.statSync(path);
    
  • 以异步方式为例,我们可以获取到文件的大小等信息,代码如下:

    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));
                           });
    
  • 日志截图如下:

 OpenHarmony 源码解析之JavaScript(文件管理API)-鸿蒙开发者社区

3.6 删除文件

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

    fileio.unlink(path, function(err) {
        if (!err) {
            // 文件删除成功
        }
    });
    
  • 以同步方法删除文件

    fileio.unlinkSync(path);
    
  • 以异步方式为例,执行文件的删除操作,代码如下:

    fileio.unlink(filePath, function (err) {
                if (!err) {
                    prompt.showToast({
                        message: "删除成功"
                    }); 
                }
            });
    
  • 通过对比查看删除前后的日志文件可以验证文件删除成功:

 OpenHarmony 源码解析之JavaScript(文件管理API)-鸿蒙开发者社区

3.7 创建文件夹

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

    fileio.mkdir(path, function(err) {
        if (!err) {
            // 创建文件夹成功
        }
    });
    
  • 以同步方法创建目录

    fileio.mkdirSync(path);
    
  • 以同步创建目录方式,创建dir_test_ 测试文件夹,代码如下:

    for (let i = 0;i < 4; i++) {
                       fileio.mkdirSync(data + "/cache_files/dir_test_" + i);
                   }
    
  • 通过日志我们可以验证文件夹创建成功

 OpenHarmony 源码解析之JavaScript(文件管理API)-鸿蒙开发者社区

3.8 文件的复制、移动操作

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

    fileio.copyFile(src, dest, function (err) { 
    });
    
  • 以同步方法复制文件

    fileio.copyFileSync(src, dest);
    
  • src:待复制文件的路径或待复制文件的描述符,dest:目标文件路径或目标文件描述符,具体代码如下:

    fileio.copyFile(filePath, dest, function (err) {
                 if(!err){
                    prompt.showToast({
                        message: "复制成功"
                    });
                }
            });
    
  • 通过查询目标路径下面文件信息来验证操作是否成功

 OpenHarmony 源码解析之JavaScript(文件管理API)-鸿蒙开发者社区

更多原创内容请关注:开鸿 HarmonyOS 学院

入门到精通、技巧到案例,系统化分享HarmonyOS开发技术,欢迎投稿和订阅,让我们一起携手前行共建鸿蒙生态。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
JavaScript(文件管理API)_Demo.rar 41.26M 98次下载
已于2021-11-29 15:50:25修改
13
收藏 11
回复
举报
4条回复
按时间正序
/
按时间倒序
红叶亦知秋
红叶亦知秋

文件的增删改查是系统中不可或缺的存在。

2
回复
2021-11-24 14:50:34
Whyalone
Whyalone

JS的文件系统开放了

回复
2021-11-26 10:52:13
司空摘猫
司空摘猫

问一下博主测试这些文件相关的API 可以在模拟器上进行吗  还是必须要真机呢

回复
2022-3-31 15:16:15
wx631991603cf3f
wx631991603cf3f

mkdirSync报Error: No such file or directory是什么情况

回复
2022-9-19 10:46:06
回复
    相关推荐