
HarmonyOS ohos.file.fs (文件管理) 使用指南沙箱文件操作全解模块类型系统内置模块关键词文件管理、fs、沙箱目录、文件读写、目录操作、ArkTS效果一、模块概述ohos.file.fs是 HarmonyOS 的文件管理模块提供了一套完整的文件与目录操作 API。应用默认运行在沙箱环境中只能访问自身沙箱目录下的文件无需额外申请存储权限。沙箱目录结构/data/storage/el2/base/ ├── cache/ ← context.cacheDir 缓存目录可清理 ├── files/ ← context.filesDir 文件目录持久存储 ├── preferences/ ← context.preferencesDir 偏好设置 └── temp/ ← context.tempDir 临时目录目录属性路径获取方式用途cacheDircontext.cacheDir缓存数据系统可能在存储不足时自动清理filesDircontext.filesDir持久文件不会被系统自动清理tempDircontext.tempDir临时文件适合中间产物二、核心 API 分类2.1 导入模块importfsfromohos.file.fs;import{BusinessError}fromohos.base;2.2 文件打开模式 (OpenMode)枚举值说明OpenMode.READ_ONLY只读模式OpenMode.WRITE_ONLY只写模式OpenMode.READ_WRITE读写模式OpenMode.CREATE文件不存在时自动创建OpenMode.TRUNC打开时清空文件内容OpenMode.APPEND追加写入模式三、目录操作3.1 创建目录 —— mkdirSync// 同步创建目录try{fs.mkdirSync(${context.cacheDir}/myFolder);hilog.info(0x0001,TAG,目录创建成功);}catch(err){constbizErrerrasBusinessError;if(bizErr.code13900002){hilog.info(0x0001,TAG,目录已存在);}else{hilog.error(0x0001,TAG,创建失败:${bizErr.message});}}3.2 删除目录 —— rmdirSynctry{fs.rmdirSync(${context.cacheDir}/myFolder);}catch(err){hilog.error(0x0001,TAG,删除目录失败:${(errasBusinessError).message});}注意rmdirSync只能删除空目录。若要删除非空目录需先递归删除内部文件。3.3 读取目录内容 —— listFileSynctry{constfiles:string[]fs.listFileSync(${context.cacheDir}/myFolder);for(constfileNameoffiles){hilog.info(0x0001,TAG,文件:${fileName});}}catch(err){hilog.error(0x0001,TAG,列举文件失败:${(errasBusinessError).message});}四、文件操作4.1 创建并写入文件functioncreateAndWriteFile(filePath:string,content:string):void{letfile:fs.File|nullnull;try{// 以读写 创建模式打开文件filefs.openSync(filePath,fs.OpenMode.READ_WRITE|fs.OpenMode.CREATE);// 写入字符串内容constwriteLenfs.writeSync(file.fd,content);hilog.info(0x0001,TAG,写入成功字节数:${writeLen});}catch(err){hilog.error(0x0001,TAG,写入失败:${(errasBusinessError).message});}finally{// 务必关闭文件if(file!null){fs.closeSync(file);}}}4.2 读取文件内容functionreadFileContent(filePath:string):string{letfile:fs.File|nullnull;letcontent:string;try{filefs.openSync(filePath,fs.OpenMode.READ_ONLY);// 获取文件信息conststatfs.statSync(filePath);constbufnewArrayBuffer(stat.size);// 读取文件内容fs.readSync(file.fd,buf);contentString.fromCharCode(...newUint8Array(buf));hilog.info(0x0001,TAG,读取成功大小:${stat.size});}catch(err){hilog.error(0x0001,TAG,读取失败:${(errasBusinessError).message});}finally{if(file!null){fs.closeSync(file);}}returncontent;}4.3 追加写入文件functionappendToFile(filePath:string,content:string):void{letfile:fs.File|nullnull;try{filefs.openSync(filePath,fs.OpenMode.READ_WRITE|fs.OpenMode.APPEND);fs.writeSync(file.fd,content);}catch(err){hilog.error(0x0001,TAG,追加失败:${(errasBusinessError).message});}finally{if(file!null){fs.closeSync(file);}}}4.4 删除文件try{fs.unlinkSync(${context.cacheDir}/myFolder/old_file.txt);hilog.info(0x0001,TAG,文件删除成功);}catch(err){hilog.error(0x0001,TAG,删除失败:${(errasBusinessError).message});}4.5 获取文件信息 —— statSynctry{conststat:fs.Statfs.statSync(filePath);hilog.info(0x0001,TAG,文件大小:${stat.size}字节);hilog.info(0x0001,TAG,最后修改时间:${newDate(stat.mtime).toISOString()});hilog.info(0x0001,TAG,是否为目录:${stat.isDirectory()});hilog.info(0x0001,TAG,是否为文件:${stat.isFile()});}catch(err){hilog.error(0x0001,TAG,获取信息失败:${(errasBusinessError).message});}4.6 复制文件 —— copyFileSynctry{fs.copyFileSync(${context.cacheDir}/source.txt,${context.cacheDir}/backup.txt);hilog.info(0x0001,TAG,文件复制成功);}catch(err){hilog.error(0x0001,TAG,复制失败:${(errasBusinessError).message});}4.7 重命名/移动文件 —— renameSynctry{fs.renameSync(${context.cacheDir}/old_name.txt,${context.cacheDir}/new_name.txt);hilog.info(0x0001,TAG,重命名成功);}catch(err){hilog.error(0x0001,TAG,重命名失败:${(errasBusinessError).message});}五、完整示例文件管理工具类以下封装了一个实用的文件管理工具类涵盖常用操作importfsfromohos.file.fs;import{BusinessError}fromohos.base;import{hilog}fromkit.PerformanceAnalysisKit;constTAGFileHelper;exportclassFileHelper{/** 确保目录存在递归创建 */staticensureDir(dirPath:string):void{try{fs.accessSync(dirPath);}catch(_e){try{fs.mkdirSync(dirPath);}catch(err){hilog.warn(0x0001,TAG,创建目录失败:${(errasBusinessError).message});}}}/** 写入文本文件 */staticwriteTextFile(filePath:string,content:string):boolean{letfile:fs.File|nullnull;try{filefs.openSync(filePath,fs.OpenMode.WRITE_ONLY|fs.OpenMode.CREATE|fs.OpenMode.TRUNC);fs.writeSync(file.fd,content);returntrue;}catch(err){hilog.error(0x0001,TAG,写入失败:${(errasBusinessError).message});returnfalse;}finally{if(file!null){fs.closeSync(file);}}}/** 读取文本文件 */staticreadTextFile(filePath:string):string{letfile:fs.File|nullnull;try{filefs.openSync(filePath,fs.OpenMode.READ_ONLY);conststatfs.statSync(filePath);constbufnewArrayBuffer(stat.size);fs.readSync(file.fd,buf);returnnewTextDecoder().decode(newUint8Array(buf));}catch(err){hilog.error(0x0001,TAG,读取失败:${(errasBusinessError).message});return;}finally{if(file!null){fs.closeSync(file);}}}/** 安全删除文件 */staticdeleteFile(filePath:string):boolean{try{fs.unlinkSync(filePath);returntrue;}catch(err){hilog.error(0x0001,TAG,删除失败:${(errasBusinessError).message});returnfalse;}}/** 检查文件是否存在 */staticexists(filePath:string):boolean{try{fs.accessSync(filePath);returntrue;}catch(_e){returnfalse;}}/** 获取目录下所有文件名 */staticlistFiles(dirPath:string):string[]{try{returnfs.listFileSync(dirPath);}catch(err){hilog.error(0x0001,TAG,列举失败:${(errasBusinessError).message});return[];}}/** 清空目录内所有文件 */staticclearDirectory(dirPath:string):void{try{constfilesfs.listFileSync(dirPath);for(constfileNameoffiles){constfullPath${dirPath}/${fileName};conststatfs.statSync(fullPath);if(stat.isFile()){fs.unlinkSync(fullPath);}}}catch(err){hilog.error(0x0001,TAG,清空失败:${(errasBusinessError).message});}}}六、异步操作示例对于 UI 敏感场景推荐使用异步 API 避免阻塞主线程asyncfunctionasyncFileDemo(context:Context):Promisevoid{constfilePath${context.cacheDir}/async_demo.txt;// 异步写入letfile:fs.File|nullnull;try{filefs.open(filePath,fs.OpenMode.READ_WRITE|fs.OpenMode.CREATE);awaitfs.write(file.fd,Hello async world!);hilog.info(0x0001,TAG,异步写入完成);}finally{if(file!null){awaitfs.close(file);}}// 异步读取filenull;try{filefs.open(filePath,fs.OpenMode.READ_ONLY);conststatawaitfs.stat(filePath);constbufnewArrayBuffer(stat.size);awaitfs.read(file.fd,buf);hilog.info(0x0001,TAG,异步读取:${newTextDecoder().decode(newUint8Array(buf))});}finally{if(file!null){awaitfs.close(file);}}}七、注意事项7.1 文件描述符管理每次打开文件后必须关闭否则会导致文件句柄泄露// ✅ 推荐finally 块中关闭letfile:fs.File|nullnull;try{filefs.openSync(path,fs.OpenMode.READ_ONLY);// 操作...}finally{if(file!null){fs.closeSync(file);}}7.2 路径拼接使用模板字符串拼接路径避免硬编码分隔符// ✅ 推荐constfilePath${context.cacheDir}/subdir/file.txt;// ❌ 避免constfilePathcontext.cacheDir/subdir/file.txt;7.3 权限边界沙箱内操作无需权限访问用户文件如相册、下载需要ohos.permission.READ_MEDIA等权限跨应用共享文件使用ohos.file.share或 URI 授权八、API 速查表操作同步方法异步方法打开文件openSyncopen关闭文件closeSyncclose读取文件readSyncread写入文件writeSyncwrite创建目录mkdirSyncmkdir删除目录rmdirSyncrmdir列举文件listFileSynclistFile删除文件unlinkSyncunlink文件信息statSyncstat复制文件copyFileSynccopyFile重命名renameSyncrename检查存在accessSyncaccess