写点什么

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

作者:高心星
  • 2024-10-31
    江苏
  • 本文字数:1805 字

    阅读完需:约 6 分钟

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

【高心星出品】


文件读写

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.cacheDirlet 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: stringdo {  // 获得当前迭代器位置  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)
复制代码


用户头像

高心星

关注

天将降大任于斯人也,必先苦其心志。 2024-10-17 加入

华为开发者专家(HDE)。 10年教学经验,兼任多家科技公司技术顾问。先后从事JavaEE项目开发、Python爬虫、HarmonyOS移动应用开发等课程的教学工作。参与开发《鸿蒙应用开发基础》和《鸿蒙项目实战》等课程。

评论

发布
暂无评论
HarmonyOS 5.0应用开发——文件读写_鸿蒙_高心星_InfoQ写作社区