华为鸿蒙应用--文件管理工具(鸿蒙工具)-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") // 删除整个目录}
相关文章:
华为鸿蒙应用--文件管理工具(鸿蒙工具)-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: …...
Python基础语法笔记 tkinter的简单使用
语法 物质 动态类型语言,不需要声明类型 数字 类型int float bool 操作 //整除 **幂 字符串 str1 "Hello python" str2 "world" print(str1 * 3) # 重复输出 print(str1[1]) # 索引访问 print(str1 " " str2) # 拼接 print(str1[2…...

SSL/TLS 握手过程详解
SSL握手过程详解 1、SSL/TLS 历史发展2、SSL/TLS握手过程概览2.1、协商交换密码套件和参数2.2、验证一方或双方的身份2.3、创建/交换对称会话密钥 3、TLS 1.2 握手过程详解4、TLS 1.3 握手过程详解5、The TLS 1.2 handshake – Diffie-Hellman Edition 1、SSL/TLS 历史发展 可…...

B端产品经理学习-对用户进行需求挖掘
目录: 用户需求挖掘的方法 举例:汽车销售系统的用户访谈-前期准备 用户调研提纲 预约用户做访谈 用户访谈注意点 我们对于干系人做完调研之后需要对用户进行调研;在C端产品常见的用户调研方式外,对B端产品仍然适用的 用户需…...

高清网络视频监控平台的应用-城市大交通系统视联网
目 录 一、应用需求 二、系统架构设计 三、功能介绍 1.实时视频监控 2.云台控制 3.语音功能 4. 录像管理与回放 5.告警联动 6.多种显示终端呈现 (1)CS客户端 (2)web客户端 (3…...
java设计小分队01
1.开发流程: 编辑:生成.java文件编译:javac命令,生成.class文件运行:java命令 2.标识符下列那个(不)合法: 除了第一个词小写,其他词首字母大写;java标识符为…...
instant ngp win11 安装笔记
目录 训练保姆级教程: instant ngp安装参考: 编译步骤1 编译步骤2 我把编译成功的库分享到百度网盘了 训练保姆级教程: 英伟达NeRF项目Instant-ngp在Windows下的部署,以及数据集的制作(适合小白的保姆级教学)_colmap2nerf.p…...

Microsoft Word去除页面多余的换行符
大家写论文的时候或者排版的时候可能遇到换行符多出来了导致页面的不美观。像下面这张图一样,虽然latex不会出现这种问题。 处理方式 点击插入然后点击分页 结果展示...

[Javaweb/LayUI/上机考试作业/开源]学生/图书/课程/仓库等管理系统六合一基础功能通用模板
展示 考试要求 给定用户表和六张图书/教师/顾客/仓库....的表(随机给每人抽选),要求实现用户登录注册,异步更新,对物品增删改查,精确/模糊查询等。 环境 tomcat 9 mysql 8 java 17 项目结构 项目类图 写前…...

完善 Golang Gin 框架的静态中间件:Gin-Static
Gin 是 Golang 生态中目前最受用户欢迎和关注的 Web 框架,但是生态中的 Static 中间件使用起来却一直很不顺手。 所以,我顺手改了它,然后把这个改良版开源了。 写在前面 Gin-static 的改良版,我开源在了 soulteary/gin-static&a…...
html websocket的基本使用
html websocket的基本使用 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"w…...

大数据 MapReduce是什么?
在Hadoop问世之前,其实已经有了分布式计算,只是那个时候的分布式计算都是专用的系统,只能专门处理某一类计算,比如进行大规模数据的排序。 很显然,这样的系统无法复用到其他的大数据计算场景,每一种应用都…...
ubuntu 如何放开防火墙端口,ubuntu 防火墙操作命令,ubuntu 防火墙全面操作说明
本文介绍了Ubuntu操作系统有关防火墙操作的命令。为了便于说明,请使用 root 用户或具有超级管理员权限的用户登录到 Ubuntu 系统,这样操作命令前就不需要加 sudo了。 一、安装防火墙 如果没有安装防火墙,请用如下命令安装: apt …...

计算机视觉入门与调优
大家好啊,我是董董灿。 在 CSDN 上写文章写了有一段时间了,期间不少小伙伴私信我,咨询如何自学入门AI,或者咨询一些AI算法。 90%的问题我都回复了,但有时确实因为太忙,没顾得过来。 在这个过程中&#x…...
Ndk编译hevc静态库
源码下载: https://hg.videolan.org/x265 然后执行以下脚本: #!/bin/bash# 设置NDK路径,根据你的实际安装路径修改 NDK_PATH/mnt/c/Users/Administrator/ubuntu_dev/ndk/android-ndk-r21e# 设置目标平台和ABI版本,可以根据实际情况修改 aarch64-linux-…...

Linux系统安装MySQL
Linux系统安装MySQL 第一步:下载YUM wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm第二步:安装MySQL的YUM 仓库 rpm -ivh mysql57-community-release-el7-11.noarch.rpm第三步:查看MySQL版本 yum repolist …...

linux go环境安装 swag
下载依赖包 go get -u github.com/swaggo/swag编译 移动到下载的swag包目录,一般在$GOPATH/pkg/mod下 查看 GOPATH echo $GOPATHcd /root/GolangProjects/pkg/mod/github.com/swaggo/swagv1.16.2go install ./cmd/swag/不出意外,$GOPATH/bin下 已经有了swag 初…...

高效分割视频:批量剪辑,轻松提取m3u8视频技巧
在数字媒体时代,视频分割是一项常见的需求。无论是为了编辑、分享还是其他要求,经常要将长视频分割成多个短片。传统的视频分割方法往往需要手动操作,既耗时又容易出错。现在来看云炫AI智剪高效分割视频的方法,批量剪辑并轻松提取…...

自由DIY预约小程序源码系统:适用于任何行业+自由DIY你的界面布局+全新升级的UI+多用户系统 带安装部署教程
随着移动互联网的普及,预约服务逐渐成为人们日常生活的一部分。从家政服务、医疗挂号到汽车保养,预约已经渗透到各个行业。然而,市面上的预约小程序大多功能单一,界面老旧,无法满足商家和用户的个性化需求。今天来给大…...

el-select 多选,选有一个未选择的选项
多选有未选择这个选项后。会出现一个情况,绑定的数据为[‘未选择’,‘cpu1’,‘cpu2’] 进行一个处理,选择(未选择)就清除(其它的选择),选择(cpu)就清除(未选…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...