华为鸿蒙应用--文件管理工具(鸿蒙工具)-ArkTs

0、代码

import fs from '@ohos.file.fs';
import { Logger } from './Logger';
import { Constants } from '../constants/Constants';
import { toast } from './ToastUtils';

export class FileUtils {

  /**
   * 获取目录下所有文件
   * @param filesDir
   * @returns
   */
  static getFiles(filesDir: string) {
    return this.getFilesWithFilter(filesDir);
  }

  /**
   * 获取目录下所有过滤的文件
   * @param filesDir
   * @returns
   */
  static async getFilesWithFilter(pathDir: string, filter?: any) {
    let files: string[]
    let options = {}
    if (filter !== undefined) {
      options = filter;
    }
    await fs.listFile(pathDir, options).then((filenames) => {
      files = filenames;
    }).catch((err) => {
      toast(err);
      files = [];
      Logger.error(Constants.TAG, JSON.stringify(err));
    });
    return files;
  }

  /**
   * 获取文件详细属性信息
   * @param filePath
   */
  static async getFileStat(filePath: string) {
    let resp;
    await  fs.stat(filePath).then((stat) => {
      resp = stat;
    }).catch((err) => {
      toast(err);
      Logger.error(Constants.TAG, JSON.stringify(err));
    });
    return resp;
  }

  /**
   * 检查文件是否存在
   * @param filePath
   */
  static async accessFile(filePath: string) {
    let resp = false;
    await  fs.access(filePath).then((res) => {
      resp = res;
    }).catch((err) => {
      toast(err);
      Logger.error(Constants.TAG, JSON.stringify(err));
    });
    return resp;
  }

  /**
   * 复制文件
   * @param filePath
   */
  static async copyFile(srcPath: string, dstPath: string) {
    let access = await this.accessFile(srcPath);
    if (access) {
      await fs.copyFile(srcPath, dstPath).then(() => {
        toast("复制成功");
        Logger.debug(Constants.TAG, "复制成功");
      }).catch((err) => {
        toast(err.message);
        Logger.error(Constants.TAG, "copy file failed with error message: " + err.message + ", error code: " + err.code);
      });
    } else {
      toast("原文件不存在!")
    }
  }

  /**
   * 创建目录
   * @param filePath
   */
  static async mkdir(dirPath: string) {
    await fs.mkdir(dirPath).then(() => {
      toast("创建成功");
      Logger.debug(Constants.TAG, "创建成功");
    }).catch((err) => {
      toast(err.message);
      Logger.error(Constants.TAG, "mkdir failed with error message: " + err.message + ", error code: " + err.code);
    });
  }

  /**
   * 打开文件读取数据
   * @param filePath
   */
  static async openAndRedFile(filePath: string) {
    let resp: string;
    let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE);
    let buf = new ArrayBuffer(4096);
    await fs.read(file.fd, buf).then((readLen) => {
      Logger.debug(Constants.TAG, String.fromCharCode.apply(null, new Uint8Array(buf.slice(0, readLen))));
      resp = String.fromCharCode.apply(null, new Uint8Array(buf.slice(0, readLen)));
      fs.closeSync(file);
    }).catch((err) => {
      resp = "";
      Logger.error(Constants.TAG, "read file data failed with error message: " + err.message + ", error code: " + err.code);
    });
    return resp;
  }

  /**
   * 删除整个目录
   * @param filePath
   */
  static async rmdir(pathDir : string) {
    let access = await this.accessFile(pathDir);
    if (access) {
    await fs.rmdir(pathDir).then(() => {
      toast("删除成功");
      Logger.debug(Constants.TAG, "删除成功");
    }).catch((err) => {
      toast(err.message);
      Logger.error(Constants.TAG, "rmdir failed with error message: " + err.message + ", error code: " + err.code);
    });
    } else {
      toast("原文件不存在!")
    }
  }
}

1、使用:

static async test(){
    let filePath = getContext(this).filesDir;

    let files = await FileUtils.getFiles(filePath); // 列出文件夹下所有文件名

    let options = {
      "recursion": false, // 是否递归子目录下文件名,默认为false。
      "listNum": 0, // 列出文件名数量。当设置0时,列出所有文件,默认为0。
      "filter": {
        "suffix": [".png", ".jpg", ".jpeg", ".txt"], // Array<string>:文件后缀名完全匹配
        "displayName": ["*abc", "test2*"], // Array<string>:文件名模糊匹配
        //"mimeType": ["text/html"],                   // Array<string>:mime类型完全匹配
        "fileSizeOver": 0, // number:文件大小匹配
        "lastModifiedAfter": 0, // number:文件最近修改时间匹配,在指定时间点及之后的文件。
        "excludeMedia": false, // boolean:是否排除Media中已有的文件。
      }
    };
    let files2 = await FileUtils.getFilesWithFilter(filePath, options) // 列出文件夹下所有文件名,支持递归列出所有文件名(包含子目录下),支持文件过滤

    let stat = await FileUtils.getFileStat(filePath + "/test1.txt") //  获取文件详细属性信息
    Logger.debug(Constants.TAG, "ino:" + stat.ino) // 标识该文件。通常同设备上的不同文件的INO不同。
    Logger.debug(Constants.TAG, "mode:" + stat.mode) // 表示文件权限,各特征位的含义见:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V2/js-apis-file-fs-0000001451843016-V2#ZH-CN_TOPIC_0000001574088233__stat
    Logger.debug(Constants.TAG, "uid:" + stat.uid) // 文件所有者的ID。
    Logger.debug(Constants.TAG, "gid:" + stat.gid) // 文件所有组的ID。
    Logger.debug(Constants.TAG, "size:" + stat.size) // 文件的大小,以字节为单位。仅对普通文件有效。
    Logger.debug(Constants.TAG, "atime:" + stat.atime) // 上次访问该文件的时间,表示距1970年1月1日0时0分0秒的秒数。
    Logger.debug(Constants.TAG, "mtime:" + stat.mtime) // 上次修改该文件的时间,表示距1970年1月1日0时0分0秒的秒数。
    Logger.debug(Constants.TAG, "ctime:" + stat.ctime) // 最近改变文件状态的时间,表示距1970年1月1日0时0分0秒的秒数。

    let access = await FileUtils.accessFile(filePath + "/test1.txt") // 检查文件是否存在

    await FileUtils.copyFile(filePath + "/test1.txt", filePath + "/test22.txt") // 复制文件

    await FileUtils.mkdir(filePath + "/testDir")  // 创建目录

    let readLen = await  FileUtils.openAndRedFile(filePath + "/test1.txt")  // 打开.txt文件并读取内容

    await FileUtils.rmdir(filePath + "/testDir")  //  删除整个目录
  }

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
鸿蒙(HarmonyOS)是华为公司自主研发的一款全面分布式操作系统。作为一个开源的操作系统,鸿蒙吸引了众多开发者的关注与参与。以下是华为鸿蒙HarmonyOS开发者资料的汇总: 1. 官方网站:鸿蒙操作系统的官方网站提供了详细的技术文档、开发者工具下载、应用开发指南等资源。开发者可以访问官方网站获取最新的开发者资料和支持。 2. 开发者论坛:华为设立了专门的鸿蒙开发者论坛,为开发者提供交流、分享经验的平台。开发者可以在论坛中提问、解答问题,并与其他开发者进行交流与合作。 3. 开发者账号:开发者可以在官方网站注册鸿蒙开发者账号,获得相关的开发者权限和资源。通过开发者账号,开发者可以获取最新的开发者工具、操作系统固件等。 4. 技术文档:华为为鸿蒙开发者提供了丰富的技术文档,包括开发指南、API文档、示例代码等。开发者可以通过阅读文档了解鸿蒙操作系统的基本原理和开发方法。 5. 开发者工具:华为提供了一系列的开发者工具,如开发IDE、调试工具、模拟器等。开发者可以使用这些工具进行应用开发、调试和测试。 6. 大学合作计划:华为与全球的高校展开鸿蒙开发者培训计划,提供课程、讲座和实践机会。通过参加这些计划,开发者可以获得更多的知识和技能。 7. 开发者大会:华为定期举办开发者大会,为开发者提供平台展示和交流经验。开发者可以参加这些大会,与华为工程师和其他开发者进行面对面的交流和学习。 总之,华为鸿蒙HarmonyOS开发者资料丰富多样,包括官方网站、开发者论坛、开发者账号、技术文档、开发者工具、大学合作计划和开发者大会等。这些资料和资源为开发者提供了全面的支持和协助,帮助他们更好地开发应用并适应鸿蒙操作系统的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PZR001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值