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