harmonyOS的文件的增、删、读、写相关操作(fs/content)

注意: 操作harmonyOS的文件只能对app沙箱内的文件进行操作
牵扯到两个支持点: fs和content这两个API;

具体的操作方法看下图:
在这里插入图片描述

创建文件
//js 引入
import fs from "@ohos.files.fs"
import featureAbility from "@ohos.ability.featureAbility"; // 上下文依赖

// 增加文件
creatDir(){
	// 获取上下文
	 let content = featureAbility.getContent();
	 //  content.getFilesDir().then(path=>{}) 获取app的可操作沙箱路径
	 content.getFilesDir(path=>{
	 		// 定义要创建的文件
	 		let dirPath = path + '/testDir';
	 		fs.mkdir(dirPath, (err, res)=>{
	 			if(err) return console.log('文件创建失败', JSON.stringIfy(err));
				console.log('文件创建成功', JSON.stringIfy(res));
			})
	 }).catch(err => {
	 		if(err) return console.log('app沙箱路径获取失败', JSON.stringIfy(err));
	})
}
读文件
//js 引入
import fs from "@ohos.files.fs"
import featureAbility from "@ohos.ability.featureAbility"; // 上下文依赖

readDir(){
	// 获取上下文
	 let content = featureAbility.getContent();
	 content.getFilesDir().then(path=>{
	 		let options = {
				// 是否递归向下查找文件 默认true(水平读取文件),
				recursion: false,
				// 查找文件的数量限制 (0, 代表查找全部文件)
				listNum: 0,
				// 文件过滤 后缀名、文件名、文件类型、文件大小
				filter:  {
					// 后缀名
                    // suffix: ['.png', '.txt'],
                    // 文件名
                    // displayName: ['xxx', 'xx', '...'],
                    // 文件类型 text/plan, auto/mp3,...,  mine匹配所有类型
                    // mineType: ['mine'],
                    // 文件大小 大于或等于当前数值 单位bit(b,kb,mb,gb,tb,pb)
                    fileSizeOver: 1024,
                    // 最后修改时间
                    // lastModifiedAfter: new Date(2025, 1, 1).getTime(),
                    // 是否排除media已有的文件
                    // excludeMedia: false
				}
			}
	 		fs.listFile(path, options).then(fileName=>{
				console.log('文件读取成功', JSON.stringIfy(res));
			}).catch(err => {
	 			if(err) return console.log('文件读取失败', JSON.stringIfy(err));
			})
	 }).catch(err => {
	 		if(err) return console.log('app沙箱路径获取失败', JSON.stringIfy(err));
	})
}
写文件
//js 引入
import fs from "@ohos.files.fs"
import featureAbility from "@ohos.ability.featureAbility"; // 上下文依赖

writeFile(){
	// 获取上下文
	 let content = featureAbility.getContent();
	 content.getFilesDir().then(path=>{
	 		// 写文件遵从先读后写的规则,只有读取成功才能写入,所以这儿是sync同步操作, 打开文件配置项涉及两项(需要打开的文件路径, 打开时的规则模式mode)
	 		// @params path: 文件路径
	 		// @params mode:  fs.OpenMode.READ_WRITE/CREATE 规则模式/选项
	 		// mode 包含两种API: 1. READ_WRITE 文件存在读取并写入; 2.CREATE 文件不存在先创建在写入	 		
	 		let filePath = path. + '/test.txt'; // 指定文件
	 		let getFIle = fs.openSync(filePath,  fs.OpenMode.READ_WRITE |  fs.OpenMode.CREATE); // 打开文件
			// 写入方法 fs.write(file.fd,  text, {offset, length, encoding});
			// @params file.fd: 代表打开的文件,标示符
			// @params text: 写入的内容,可以是字符串或者数据流buffer
			// @params option {offset:写入的偏移量, length:  ‘写入长度’, encoding: “utf-8, 默认是utf-8”}
	 		fs.write(getFIle.fd,  '这是我要写入的内容',  {encoding: 'utf-8'}, (err, readLen)=>{
	 			if(err) return console.log('文件写入失败', JSON.stringIfy(err));
				console.log('文件写入成功','写入长度'+readLen);
			}).catch(err => {
	 			if(err) return console.log('文件写入失败'', JSON.stringIfy(err));
			})
	 }).catch(err => {
	 		if(err) return console.log('app沙箱路径获取失败', JSON.stringIfy(err));
	})
}
读成功写入的文件内容
//js 引入
import fs from "@ohos.files.fs"
import featureAbility from "@ohos.ability.featureAbility"; // 上下文依赖

readFile(){
	// 获取上下文
	 let content = featureAbility.getContent();
	 content.getFilesDir().then(path=>{
	 		// 写文件遵从先读后写的规则,只有读取成功才能写入,所以这儿是sync同步操作, 打开文件配置项涉及两项(需要打开的文件路径, 打开时的规则模式mode)
	 		// @params path: 文件路径
	 		// @params mode:  fs.OpenMode.READ_WRITE/CREATE 规则模式/选项
	 		// mode 包含两种API: 1. READ_WRITE 文件存在读取并写入; 2.CREATE 文件不存在先创建在写入	 		
	 		let filePath = path. + '/test.txt'; // 指定文件
	 		let getFIle = fs.openSync(filePath,  fs.OpenMode.READ_WRITE); // 打开文件
			// 写入方法 fs.read(file.fd,  text, {offset, length, encoding});
			// @params file.fd: 代表打开的文件,标示符
            let buf = new ArrayBuffer('写入的内容');
            let con = fs.read(file.fd, buf, (err, readLen) => {
                console.log('zhaowb 读取成功:'+readLen)
                // 1. 获取到成功写入的长度,截取buffer部分内容
                // buf.slice(0, readLen)
                // 2. 将获取到的buffer内容转化为无序的8位的二进制数组(给chartCode提供数据源)
                // new Uint8Array(buf.slice(0, readLen))
                // 3. 转换成字符串,需要调用String上方法,通过String支持的fromCharCode, String.fromCharCode 支持单个编码转化,数组需结合apply或bind
                // String.fromCharCode(new Uint8Array(buf.slice(0, readLen)))
                // 4. 终极转化,完成最终的code编码转字符串, 数组的转化得调用
                // String.fromCharCode.apply(null, String.fromCharCode(new Uint8Array(buf.slice(0, readLen))));
            })catch(err => {
	 			if(err) return console.log('文件写入失败'', JSON.stringIfy(err));
			})
	 }).catch(err => {
	 		if(err) return console.log('app沙箱路径获取失败', JSON.stringIfy(err));
	})
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人才画像如何助力企业 “看准人”、“看透人”

在当今竞争激烈的商业世界中,企业对于人才的需求愈发迫切。然而,如何在众多求职者中 “看准人”、“看透人”,挑选出真正适合企业的人才,却成为了许多企业面临的难题。而人才画像的出现,为企业提供了一把有力的武器。 …

LC-搜索二维矩阵II、相交链表、反转链表、回文链表、环形链表、环形链表ll

搜索二维矩阵II 方法:从右上角开始搜索 我们可以从矩阵的右上角开始进行搜索。如果当前元素 matrix[i][j] 等于 target,我们直接返回 true。如果 matrix[i][j] 大于 target,说明 target 只能出现在左边的列,所以我们将列指针向左…

Win11配置wsl、ubuntu、docker

系统要求 安装WSL。 开通虚拟化: 准备工作 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestartdism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestartwsl --set-default-versi…

达梦tpcc压测

造数 在这个日志输出中,主要执行了一系列数据库操作,涵盖了数据库信息检查、表的创建与数据加载、索引的添加、数据验证等步骤。具体分析如下: 数据库信息检查: 查询了数据库的版本、实例名称、日志文件大小、字符集等信息。 删…

MySQL技术公开课:Mysql-Server-8.4.4 Innodb 集群搭建与维护

MySQL技术公开课 - Mysql-Server-8.4.4 Innodb 集群搭建与维护 讲课内容: 1、Innodb集群框架介绍 2、Innodb集群部署(mysql-Server、mysql-shell、mysql-router安装配置) 3、Innodb集群维护(主备切换、启动与关闭、故障排除) Mysql-server商业版目前最新的是8.…

TCP/IP参考模型和网络协议

由于国防部担心他们一些重要的主机、路由器和互联网关可能会突然崩溃,所以网络必须实现的另一目标是网络不受子网硬件损失的影响,已经建立的会话不会被取消,而且整个体系结构必须相当灵活。 TCP/IP是一组用于实现网络互连的通信协议。Interne…

机器学习-02-机器学习算法思想以及在各行各业的应用

总结 本系列是机器学习课程的第02篇,主要介绍机器学习算法思想以及在各行各业的应用 本门课程的目标 完成一个特定行业的算法应用全过程: 定义问题(Problem Definition) -> 数据收集(Data Collection) -> 数据分割(Data…

无须高配电脑-ChatboxAI 利用SiliconCloud 接入在线deepseek

Deepseek官方api调用 方式收费,官网提供的在线推理又经常出现”服务器繁忙,请稍后再试“的问题。本文借助本地聊会客户端 ChatboxAI, 通过SiliconCloud 平台来接入各种在线大模型,包括Deepseek. ChatboxAI(完全免费) Chatbox AI…

RocketMQ及和Kafka的区别

目录 1 从场景入手2 RocketMQ是什么?3 RocketMQ及和Kafka的区别3.1 在架构上做了减法3.1.1 简化协调节点3.1.2 简化分区3.1.3 底层存储3.1.3.1 Kafka底层存储3.1.3.1 RocketMQ底层存储 3.1.4 简化备份模型3.1.4.1 Kafka备份模型3.1.4.2 RocketMQ备份模型 3.1.5 Rock…

一文深入了解DeepSeek-R1:模型架构

本文深入探讨了 DeepSeek-R1 模型架构。让我们从输入到输出追踪 DeepSeek-R1 模型,以找到架构中的新发展和关键部分。DeepSeek-R1 基于 DeepSeek-V3-Base 模型架构。本文旨在涵盖其设计的所有重要方面。 📝 1. 输入上下文长度 DeepSeek-R1的输入上下文长…

在 PyCharm 中接入deepseek的API的各种方法

在 PyCharm 中接入 DeepSeek 的 API,通常需要以下步骤: 1. 获取 DeepSeek API 密钥 首先,确保你已经在 DeepSeek 平台上注册并获取了 API 密钥(API Key)。如果没有,请访问 DeepSeek 的官方网站注册并申请 …

java每日精进 2.13 Ganache(区块链本地私有化部署)

需求:使用区块链实现数据村存储,记录一些不可篡改的交互信息,网络环境为内外网均需要部署; 1.准备工作(软件安装) 1.1 安装 Node.js 和 npm 1.2 安装 Ganache 地址如下:windows有可视化界面 &a…

【深度学习】多目标融合算法(四):多门混合专家网络MMOE(Multi-gate Mixture-of-Experts)

目录 一、引言 二、MMoE(Multi-gate Mixture-of-Experts,多门混合专家网络) 2.1 技术原理 2.2 技术优缺点 2.3 业务代码实践 2.3.1 业务场景与建模 2.3.2 模型代码实现 2.3.3 模型训练与推理测试 2.3.4 打印模型结构 三、总结 一、…

sqli-labs靶场实录(四): Challenges

sqli-labs靶场实录: Challenges Less54确定字段数获取数据库名获取表名获取列名提取密钥值 Less55Less56Less57Less58爆库构造爆表构造爆列构造密钥提取构造 Less59Less60Less61Less62爆库构造 Less63Less64Less65免责声明: Less54 本关开始上难度了 可以看到此关仅…

使用Redis实现分布式锁,基于原本单体系统进行业务改造

一、单体系统下&#xff0c;使用锁机制实现秒杀功能&#xff0c;并限制一人一单功能 1.流程图&#xff1a; 2.代码实现&#xff1a; Service public class VoucherOrderServiceImpl extends ServiceImpl<VoucherOrderMapper, VoucherOrder> implements IVoucherOrderSe…

Python + WhisperX:解锁语音识别的高效新姿势

大家好&#xff0c;我是烤鸭&#xff1a; 最近在尝试做视频的质量分析&#xff0c;打算利用asr针对声音判断是否有人声&#xff0c;以及识别出来的文本进行进一步操作。asr看了几个开源的&#xff0c;最终选择了openai的whisper&#xff0c;后来发现性能不行&#xff0c;又换了…

【Linux】Ubuntu Linux 系统——Node.js 开发环境

ℹ️大家好&#xff0c;我是练小杰&#xff0c;今天星期五了&#xff0c;同时也是2025年的情人节&#xff0c;今晚又是一个人的举个爪子&#xff01;&#xff01; &#x1f642; 本文是有关Linux 操作系统中 Node.js 开发环境基础知识&#xff0c;后续我将添加更多相关知识噢&a…

Oracle查看执行计划

方式一&#xff08;查看的真实的使用到的索引&#xff09; 1.执行解释计划 2.查看结果 可以看到使用了RANGE SCAN范围扫描的索引 方式二&#xff08;查看的是预测的可能会用到的索引&#xff09; 1.执行解释计划sql explain plan for select * from COURSE where COURSE_…

百度 AI开源!将在6月30日开源文心大模型4.5系列

【大力财经】直击互联网最前线&#xff1a;百度近期动作频频&#xff0c;先是宣布将在未来数月陆续推出文心大模型4.5系列&#xff0c;并于6月30日正式开源。 据大力财经了解&#xff0c;自DeepSeek开源之风盛行全球后&#xff0c;开源闭源路径的选择就成为AI领域的热门话题&a…

【DDD系列-2】风暴出的领域模型

为什么使用DDD​ 三个问题​ 1.为什么我们的系统越做越多&#xff0c;越来越庞大&#xff0c;还需要不断的重构&#xff1f;​ 2.为什么我们的系统业务越来越复杂&#xff0c;服务层的代码越来越多难以维护&#xff0c;不敢维护&#xff1f;​ 3.为什么一旦业务变化或者数据…