华为鸿蒙应用--文件管理工具(鸿蒙工具)-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__statLogger.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")  //  删除整个目录}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/592832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3.0 所采用的 Composition Api 与 Vue2.x 使用的 Options Api 有什么不同

Vue3.0 所采用的 Composition Api 与 Vue2.x 使用的 Options Api 有什么不同? Composition API 解决了什么问题 Composition API 可以说是 Vue3 的最大特点&#xff0c;那么为什么要推出 Composition Api &#xff0c;解决了什么问题? 通常使用 Vue2 开发的项目&#xff0…

Java 将base64编码字符串转换为图片工具类

前言 在一些前后端分离项目中&#xff0c;接口方需要前端把图片转换成base64编码字符串&#xff0c;和表单信息一起通过json接口提交。故在后端中&#xff0c;需要对前端传过来的bas64编码字符串转换成图片文件进行存储。 代码 import lombok.extern.slf4j.Slf4j;import jav…

PostgreSQL10数据库源码安装及plpython2u、uuid-ossp插件安装

PostgreSQL10数据库源码安装及plpython2u、uuid-ossp插件安装 1、环境2、安装包下载3、安装3.1 、解压3.2、配置3.3、编译安装3.4 、启动与关闭 4、安装 uuid-ossp 、plpython2u插件5、参考 1、环境 centos 7 、 postgresql 10.19 2、安装包下载 postgres 源码安装包 3、安…

【面试高频算法解析】算法练习1 二分查找

目录 前言算法解析练习题二分查找在排序数组中查找元素的第一个和最后一个位置搜索旋转排序数组 前言 本篇章开放目的是按算法类型学习算法&#xff0c;学习对应算法理论&#xff0c;并通过练习一些经典算法题深入理解这类算法&#xff0c;避免出现刷了很多算法题&#xff0c;…

golang学习专栏

GOLANG专栏 Golang基础教程 Golang基础教程 Golang练手算法 Golang练手算法 Golang设计模式 Golang设计模式 Golang数据结构和算法 Golang数据结构和算法 Golang并发编程 Golang并发编程 ORM框架Gorm Golang ORM框架gorm Golang源码分析 Golang源码分析 MySQL教程 MySQ…

11.Kubernetes Ingress NGINX Controller 部署

Ingresss是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP。 Ingress 可以提供负载均衡、SSL 终结和基于名称的虚拟托管。 Ingress NGINX Controller 是kubernetes官方维护的 Ingress 控制器 至此、kubernetes必要的组件都已经安装完成,后面可以演示一…

Java 读取超大excel文件

注意&#xff1a;此参考解决方案只是针对xlsx格式的excel文件&#xff01; Maven <dependency><groupId>com.monitorjbl</groupId><artifactId>xlsx-streamer</artifactId><version>2.2.0</version> </dependency>读取方式1…

xxl.job docker 命令部署

xxl.job docker 命令部署 docker run -e \ PARAMS"--xxl.job.accessTokentoken123456 \ --server.servlet.context-path/xxjob-path \ --spring.datasource.usernamexxl_job \ --spring.datasource.passwordmysqlpwd \ --spring.datasource.urljdbc:mysql://192.168.121.…

安装elasticsearch、kibana、IK分词器、扩展IK词典

安装elasticsearch、kibana、IK分词器、扩展IK词典 后面还会安装kibana&#xff0c;这个会提供可视化界面方面学习。 需要注意的是elasticsearch和kibana版本一定要一样&#xff01;&#xff01;&#xff01; 否则就像这样 elasticsearch 1、创建网络 因为我们还需要部署k…

java常用数据结构

List&#xff1a;ArrayList 和 LinkedList 1、ArrayList 和 LinkedList都是非线程安全 2、ArrayList 可以直接根据下表定位元素&#xff0c;查找速度快&#xff0c;但是修改元素慢&#xff1b;LinkedList 查找元素必须从第一个开始逐个查找&#xff0c;查找速度慢&#xf…

力扣labuladong一刷day51天单调栈应用

力扣labuladong一刷day51天单调栈应用 一、239. 滑动窗口最大值 题目链接&#xff1a;https://leetcode.cn/problems/sliding-window-maximum/ 思路&#xff1a;滑动窗口最大值&#xff0c;既要维护加入的时间顺序&#xff0c;又要 class Solution {public int[] maxSliding…

QT上位机开发(会员管理软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们学习了ini文件的解析办法&#xff0c;通过QSettings类就可以很轻松地访问ini文件里面的数据。除了ini文件之外&#xff0c;另外一种经常出…

pip安装报错SSL

confirming the ssl certificate: HTTPSConnectionPool(hostmirrors.cloud.tencent.com, port443) 错误代码如上 偶然搜索&#xff1a;ubuntu pip出错 confirming the ssl certificate: HTTPSConnectionPool(host‘mirrors.cloud.tencent.com’, port443) 看到这个回答 【日常踩…

第6章-第2节-Java中的String类

1、字符串体系&#xff1a;又被称为不可变的字符序列 理解&#xff1a;描述生活中的一句话&#xff0c;内容可长可短&#xff0c;长到没有上限要求&#xff0c;短到可以没有内容 类型&#xff1a;java.lang.String类 特点&#xff1a; 1&#xff09;、不可以被别的类继承…

GC6150 5V低压步进电机驱动芯片,低噪声、低振动 应用于摄像机,机器人 医疗器械等产品中。

GC6150是双通道5V低压步进电机驱动器&#xff0c;具有低噪声、低振动的特点&#xff0c;特别适用于相机变焦对焦系统、万向架、摇头机等精度、低噪声STM控制系统&#xff0c;该芯片为每个通道集成了一个256微步的驱动器。通过SPI & T2C接口&#xff0c;客户可以方使地调整驱…

【SpringBoot3】命令行运行jar包报错可能的一些原因

端口号冲突&#xff1a; 有其他的web程序在运行&#xff0c;占用了8080端口没有主清单属性&#xff1a; 在打包jar包前&#xff0c;没有加入打包的插件spring-boot-maven-plugin&#xff0c;参考1.SpringBoot入门的第一个完整小项目&#xff08;新手保姆版教会打包&#xff09;…

【EI会议征稿通知】第五届电气、电子信息与通信工程国际学术会议 (EEICE 2024)

第五届电气、电子信息与通信工程国际学术会议 (EEICE 2024&#xff09; 2024 5th International Conference on Electrical, Electronic Information and Communication Engineering (EEICE 2024) 第五届电气、电子信息与通信工程国际学术会议 (EEICE 2024&#xff09;将于20…

docker安装esrally教程

本来用源码安装&#xff0c;首先要安装git,python,jdk&#xff0c;还要配环境特别繁琐&#xff0c;好不容易安装好后运行报如下错误&#xff0c;在官网和github搜不到解决方案&#xff0c;无奈之下只能用docker安装。 [ERROR] Cannot race. Error in load generator [0]Cannot…

redis容灾的方案设计

背景 今年各个大厂的机房事故频繁&#xff0c;其中关键组件Redis是重灾区&#xff0c;本文就来看下怎么做Redis的多机房容灾 Redis多机房容灾方案 1.首先最最直观的是直接利用Redis内部的主从数据同步来进行灾备&#xff0c;但是由于Redis内部的主从实现对机房间的网络延迟等…

基于ssm的剧本杀预约系统+vue论文

摘 要 如今社会上各行各业&#xff0c;都在用属于自己专用的软件来进行工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。互联网的发展&#xff0c;离不开一些新的技术&#xff0c;而新技术的产生往往是为了解决现有问题而产生的。针对于剧本杀预…