华为鸿蒙应用--文件管理工具(鸿蒙工具)-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)就清除(未选…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...
Python实现简单音频数据压缩与解压算法
Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...
密码学基础——SM4算法
博客主页:christine-rr-CSDN博客 专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 编辑…...
CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...
