【高心星出品】

文件读写

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)

高心星
1 声望1 粉丝

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