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.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)