当前位置: 首页 > 科技观察

OpenHarmony—文件管理系列2

时间:2023-03-12 09:44:41 科技观察

更多内容请访问:与华为官方共建的鸿蒙技术社区https://ost.51cto.com前言系列记录踩过的坑和openHarmony团队学习实践中的坑坑洼洼的记录。社区可能已经共享了相关文档,但您不妨一起讨论。1、获取指定路径下的文件列表如果需要获取指定路径下的文件列表,可以直接调用file.list获取,也可以先调用context.getFilesDir获取应用的文件路径ontheinternalstorage,andgetpath后,调用fileio.opendir即可获取存储路径下的文件。**注意:**从APIVersion6开始不再维护file模块,官方推荐使用fileio模块。1、文件模块调用getlist(){file.list({uri:'internal://app/',success:function(data){if(data.fileList.length){data.fileList.forEach(item=>{console.log(JSON.stringify(item))})}},fail:function(data,code){console.error('调用失败回调失败,code:'+code+',data:'+data);},complete:function(data,code){console.info('调用完成回调完成,code:'+code+',data:'+data);},});},2、fileio模块调用getFilesDirUri(){context.getFilesDir().then((data)=>{console.info('getFilesDirres'+data);//数据内部存储目录this.opendir(data)}).catch((error)=>{console.error('getFilesDirerr'+error.message);})},asyncopendir(path){letdir=awaitfileio.opendir(path);//dir管理目录this.inquireFiles(dir);},asyncinquireFiles(dir){letdirent=awaitdir.read();//读取下一个目录项if(dirent){console.log(dirent.name)this.inquireFiles(dir);//循环获取下一个目录下}else{dir.closeSync();//关闭目录并释放dir中的文件描述}},2.调用文件管理api时发现的问题1.注意设备的基线版本。远程模拟器的底层内核是基于HarmonyOS实现的,所以实现的文件管理异步api可以在远程模拟器上调用,底层内核是基于OpenHarmony实现的设备。如果无法成功调用文件管理异步api,则需要查看设备的基线版本号,查询基线版本是否支持文件管理的异步调用方式。2.fileio模块没有复制文件夹的方法。fileio模块提供了文件复制,但是没有文件夹的复制。所以,在实现文件夹复制的时候,可能需要自己遍历文件夹的内容,将文件一个一个遍历,并复制到对应的位置,并新建一个同名的文件夹到对应的位置。3、删除文件夹时,文件夹内不能有内容。fileio.rmdir删除文件夹时,文件夹中不能存在任何文件或文件夹数据。只有当文件夹为空时才能删除文件夹。因此,删除文件夹时,需要先删除文件夹中的所有内容,然后再删除文件夹。fileio.rmdir(path).then(function(res){//成功删除目录,执行一些操作console.log('rmdirres:'+JSON.stringify(res))}).catch(function(err){console.log('rmdirerr:'+JSON.stringify(err))});文件夹中没有文件数据执行删除文件夹返回:文件夹中有文件数据执行删除文件夹返回:4.文件夹和文件的移动fileio模块没有规定如何移动文件夹和文件,但是我们可以通过fileio重命名文件.rename,因为重命名文件需要传入两个地址,一个是目标文件当前的绝对路径,一个是目标文件当前的绝对路径。是目标文件新的绝对路径,通过改变新的绝对路径可以移动文件夹和文件。//如果文件夹存放路径为:letstoragePath='res/data/data/com.kaihong.bookrack/files/storage/test';//移动到的路径是:letmovePath='res/data/data/com.kaihong.bookrack/files/move';//文件存储路径将被拼接移动到的路径让Newpath=movePath+'/test'fileio.rename(storagePath,Newpath).then(function(res){//重命名文件成功,做点什么}).catch(function(err){});3.总结本次分享的内容是基于文件管理模块中发现的一些问题记录,希望与大家共同成长。更多信息请访问:与华为官方共建的鸿蒙技术社区https://ost.51cto.com