小工具知识网

当前位置: 首页 > 行业知识 > 华为鸿蒙应用--文件管理工具(鸿蒙工具)-ArkTs

行业知识

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

2026-11-01 23:40:57 来源:互联网转载

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:文件后缀名完全匹配        "displayName": ["*abc", "test2*"], // Array:文件名模糊匹配        //"mimeType": ["text/html"],                   // Array: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")  //  删除整个目录  }
()

上一篇:服务出口,全球商机与挑战同步来袭!

下一篇:街霸对决怎么转服务器?