HarmonyOS 5.0 应用开发——文件读写
作者:高心星
- 2024-10-31 江苏
本文字数:1805 字
阅读完需:约 6 分钟

【高心星出品】
文件读写
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)
复制代码
划线
评论
复制
发布于: 刚刚阅读数: 2
高心星
关注
天将降大任于斯人也,必先苦其心志。 2024-10-17 加入
华为开发者专家(HDE)。 10年教学经验,兼任多家科技公司技术顾问。先后从事JavaEE项目开发、Python爬虫、HarmonyOS移动应用开发等课程的教学工作。参与开发《鸿蒙应用开发基础》和《鸿蒙项目实战》等课程。









评论