HarmonyOS 5.0应用开发——文件读写

news2024/11/8 9:56:27

【高心星出品】

文章目录

      • 文件读写
        • 文件操作
          • 创建目录
          • 删除目录或者文件
          • 扫描目录中文件
        • 文本读写
          • 写入文本
          • 读取文本内容
        • 文件读写
          • 文件写入
          • 边读边写

文件读写

Core File Kit(文件基础服务)为开发者提供一套访问和管理应用文件和用户文件的能力。帮助用户更高效地管理、查找和备份各类文件,使用户能够轻松应对各种文件管理的需求。

我们这里主要针对应用文件进行处理,可以包含查看、创建、读写、删除、移动、复制、获取属性等访问操作。

在这里插入图片描述

文件操作
创建目录
//同步创建目录
fileIo.mkdirSync(this.context.cacheDir+'/pili')
删除目录或者文件
let path=this.context.cacheDir+'/pili'
// 如果文件可以使用
if(fileIo.accessSync(path)){

  if(fileIo.statSync(path).isFile())
  {//删除该文件
    fileIo.unlinkSync(path)
  }else if(fileIo.statSync(path).isDirectory()){
    //删除该目录
    fileIo.rmdirSync(path)
  }
}
扫描目录中文件
let path=this.context.cacheDir
let file=fileIo.openSync(path,fileIo.OpenMode.READ_ONLY)
// 父级目录
let parent_path=file.getParent()
// 按照过滤规则扫描出文件相对路径
let files=fileIo.listFileSync(parent_path,{recursion:true,filter:{suffix:['.jpg']}})
console.log('gxxt ',JSON.stringify(files));
文本读写
写入文本
// 打开文件
let file=fileIo.openSync(this.context.cacheDir+'/test.txt',fileIo.OpenMode.CREATE|fileIo.OpenMode.WRITE_ONLY)
// 同步写入文本
fileIo.writeSync(file.fd,'写入的测试文本')
// 关闭文件
fileIo.closeSync(file.fd)
读取文本内容

整体读取,将所有文本都读入内存,然后管理。

// 打开文件
let file = fileIo.openSync(this.context.cacheDir + '/test.txt', fileIo.OpenMode.CREATE | fileIo.OpenMode.READ_ONLY)
// 根据文件大小创建缓存区
let buffer1 = new ArrayBuffer(fileIo.statSync(file.fd).size)
// 将文本读取进入缓存区并返回读出的字节个数
let len = fileIo.readSync(file.fd, buffer1)
//将字节数组转化为buffer对象
let textbuffer = buffer.from(buffer1, 0, len)
console.log('gxxt ',textbuffer.toString('utf-8'))

直接读取字符串。

// 直接读取文件返回字符串
let text:string=fileIo.readTextSync(this.context.cacheDir + '/test.txt',{encoding:'utf-8'})
console.log('gxxt ',text)

分行读取字符串,一行内容对应一行文本。

// 获取文件行的迭代器
let iter = fileIo.readLinesSync(this.context.cacheDir + '/test.txt', { encoding: 'utf-8' })
let lines:string[]=[]
// 迭代器往下是否能迭代
let done: boolean
// 下一行内容
let line: string
do {
  // 获得当前迭代器位置
  let it=iter.next()
  line = it.value
  // 将读出的文本加入字符串
  lines.push(line)
  done = it.done
} while (done)
console.log('gxxt ',JSON.stringify(lines))
文件读写
文件写入
// 获取资源图片的字节数组
let buffer=this.context.resourceManager.getMediaContentSync($r('app.media.startIcon')).buffer
// 打开要写入的文件
let file=fileIo.openSync(this.context.tempDir+'/starticon.png',fileIo.OpenMode.CREATE|fileIo.OpenMode.WRITE_ONLY)
// 同步写入字节
fileIo.writeSync(file.fd,buffer)
// 关闭文件
fileIo.close(file.fd)
边读边写
// 要读取的文件
let srcfile = fileIo.openSync(this.context.filesDir + '/zgl.jpg', fileIo.OpenMode.READ_WRITE)
// 要写入的文件
let destfile =
  fileIo.openSync(this.context.cacheDir + '/zgl.jpg', fileIo.OpenMode.CREATE | fileIo.OpenMode.READ_WRITE)
// 每次读入字节的个数
let buffersize = 4069
// 字节数组
let buffer = new ArrayBuffer(buffersize)
// 偏移量
let off = 0
// 每次真实读取的字节个数
let len = 0
// 总的字节个数
let total = fileIo.statSync(srcfile.fd).size
// 已经写入文件的字节个数
let writetotal = 0
// 每次都从srcfile中读取字节
while (len = fileIo.readSync(srcfile.fd, buffer, { offset: off, length: buffersize })) {
  // 下次要读取的时候 偏移量更新
  off += len
  // 将读出的字节写入文件
  fileIo.writeSync(destfile.fd, buffer, { length: len })
  // 更新一下已经写入的文件的字节个数
  writetotal += len
  // 要写入的字节个数已经不足字节数组的长度的时候
  if (total - writetotal < buffersize) {
    buffersize = total - writetotal
  }
}
fileIo.closeSync(destfile.fd)

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

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

相关文章

44-RK3588s调试 camera-engine-rkaiq(rkaiq_3A_server)

在RK3588s平台上调试imx415 camera sensor 过程中&#xff0c;已经识别到了camera sensor ID&#xff0c;并且可以拿到raw图和isp处理后的图像&#xff0c;但是isp处理后的图像偏绿&#xff0c;来看查看后台服务发现rkaiq_3A_server没有运行&#xff0c;然后单独运行rkaiq_3A_s…

Linux 宝塔安装(各操作系统命令合集)

由于CentOS官方已全面停止维护CentOS Linux项目&#xff0c;公告指出 CentOS 7和8在2024年6月30日停止技术服务支持&#xff0c;详情见CentOS官方公告。导致CentOS系统源已全面失效&#xff0c;比如安装宝塔等等会出现网络不可达等报错&#xff0c;需要切换源。系统源问题&…

Android 获取OAID

获取OAID 老规矩&#xff0c;直接上&#xff1a; implementation com.huawei.hms:opendevice:6.11.0.300 // 要获取华为vaid 和aaid&#xff0c;还需添加opendevice 依赖implementation(name: oaid_sdk_2.5.0, ext: aar) import android.content.Context; import android.util.…

基于微信小程序的公务员考试信息查询系统+LW示例参考

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

【Android】Kotlin教程(4)

文章目录 1.field2.计算属性3.主构造函数4.次构造函数5.默认参数6.初始化块7.初始化顺序7.延迟初始化lateinit8.惰性初始化 1.field field 关键字通常与属性的自定义 getter 和 setter 一起使用。当你需要为一个属性提供自定义的行为时&#xff0c;可以使用 field 来访问或设置…

可以在线制作的PS网页版来了!

在当今数字化的创意时代&#xff0c;设计领域不断发展与变革&#xff0c;设计师们对于工具的需求也日益多样化和高效化。随着互联网技术的飞速进步&#xff0c;一种全新的设计工具模式应运而生——在线制作的 PS 网页版。它以其独特的优势和便捷性&#xff0c;逐渐成为众多设计…

高德地图如何添加自己店铺的位置信息?

众所周知&#xff0c;创业开店时&#xff0c;地理位置的选择至关重要。一个优越的地理位置不仅能显著提升店铺的可见度&#xff0c;还能有效吸引更多潜在顾客的光顾。而且&#xff0c;为了将店铺的客流量最大化&#xff0c;商家还需在地图平台上准确标注自己的位置信息&#xf…

【黄豆颗粒数据集】黄豆识别 机器视觉 深度学习(含数据集)

一、背景意义 随着全球农业生产的现代化&#xff0c;黄豆&#xff08;大豆&#xff09;作为一种重要的经济作物&#xff0c;广泛用于食品、饲料和工业原料的生产。准确识别和分类黄豆颗粒对于农业生产的管理、质量控制和市场分析具有重要意义。然而&#xff0c;传统的人工分类方…

JavaEE-多线程上

文章目录 线程概述进程/线程多线程的作用JVM关于线程资源的规范关于Java程序的运行原理 并发与并行并发(concurrency)并行(parallellism)并发编程与并行编程 线程的调度策略分时调度模型抢占式调度模型 创建线程线程类分析入门实现线程的第一种方式实现线程的第二种方式 线程的…

论文阅读:三星-TinyClick

《Single-Turn Agent for Empowering GUI Automation》 赋能GUI自动化的单轮代理 摘要 我们介绍了一个用于图形用户界面&#xff08;GUI&#xff09;交互任务的单轮代理&#xff0c;使用了视觉语言模型Florence-2-Base。该代理的主要任务是识别与用户指令相对应的UI元素的屏幕…

Tomcat servlet response关于中文乱码的经验

前言 最近修改老项目项目&#xff0c;使用zuul网关返回的中文内容乱码了&#xff0c;如果使用GBK或者GB2312编码确正常显示&#xff0c;稍微实验了一下&#xff0c;发现里面很多细节&#xff0c;毕竟Springboot对我们做了很多事情&#xff0c;而且当我们使用不同的模式会出现很…

服务器的免密登录和文件传输

在天文学研究中&#xff0c;通常会采用ssh登录服务器&#xff0c;把复杂的计算交给服务器&#xff0c;但是如果你没有进行额外的配置&#xff0c;那么登录服务器&#xff0c;以及和服务器进行文件传输&#xff0c;每次都要输入账号和密码&#xff0c;比较不方便&#xff0c;Win…

Windows Server NTFS磁盘变RAM的处理过程

问题描述 客户服务器的磁盘数据爆满&#xff0c;需要将磁盘进行扩容&#xff0c;因为是虚拟机所以先在虚拟化平台上将原来的磁盘空间改大&#xff0c;再进入系统&#xff0c;在磁盘管理器上将需要扩容的磁盘进行扩展。扩展完后系统报文件系统有问题&#xff0c;扩容的磁盘容量…

No.23 笔记 | WEB安全 - 任意文件漏洞 part 5

本文全面且深入地探讨了文件上传漏洞相关知识。从基础概念出发&#xff0c;清晰地阐述了文件上传漏洞的定义及其产生的本质原因&#xff0c;同时列出了该漏洞成立的必要条件。详细说明了文件上传漏洞可能对服务器控制权、网站安全以及业务运营带来的严重危害。 文中还深入解析了…

[mysql]子查询的概述和分类及单行子查询

子查询引入 查询的基本结构已经给大家了,子查询里面也是有一些新的内容,子查询其实就是在查询中嵌套另一个查询,叫嵌套查询可能大家更容易理解一点..,类似与FOR循环和FOR循环的嵌套,这一章是我们查询的最难的部分,大家 难度是查询的顶峰,多表查询和子查询是非常重要,SQL优化里…

EDA --软件开发之路

之前一直在一家做数据处理的公司&#xff0c;从事c开发&#xff0c;公司业务稳定&#xff0c;项目有忙有闲&#xff0c;时而看下c&#xff0c;数据库&#xff0c;linux相关书籍&#xff0c;后面跳槽到了家eda公司&#xff0c;开始了一段eda开发之路。 eda 是 electric design …

【移动应用开发】使用多媒体--通知/播放音频/视频

目录 一、具体步骤 二、运行截图 1. 开启通知权限 2. 播放音乐 3. 播放视频 三、源代码 1. activity_main.xml 2. activity_video_player.xml 3. activity_notification.xml 4. 一些配置 5. MainActivity 6. VideoPlayerActivity 7. NotificationActivity 8. And…

代码备份管理 —— Git实用操作

目 录 Git那些事版本控制系统git环境搭建运行bashbash命令行git账号全局设置本地仓库的存在远程仓库的存在git管理基本流程git仓库的文件夹常用git命令工作区变为git仓库add命令使用branch命令使用checkout命令使用commit命令使用仓库状态查询代码变更后提交删除或恢复文件管理…

windows下安装及使用labelme

1.进入Anaconda Prompt对话窗口 输入&#xff1a;conda create --namelabelme python3.6 # 创建一个叫labelme的环境 conda create --namelabelme python3.6 2.激活新建的环境&#xff0c;进入 输入&#xff1a;activate labelme #激活环境 activate labelme 3.安装pyqt5 …

集群渲染是一台节点输出吗?它是云渲染农场吗

集群渲染并非单一节点的输出&#xff0c;而是一种分布式计算技术&#xff0c;它通过多台计算机协同工作来加速3D渲染过程。这种技术常被视作云渲染农场的前身&#xff0c;两者在提高渲染效率方面有着相似之处。接下来&#xff0c;让我们深入了解集群渲染与云渲染农场之间的联系…