Flutter调用writeAsBytes报PathNotFoundException问题求助
Flutter PathNotFoundException 解决:无法将Assets文件写入临时目录
问题描述
我使用以下Flutter函数尝试将Assets中的文件复制到应用临时目录:
Future<File> getFile(String fileName) async { final appDir = await getTemporaryDirectory(); final appPath = appDir.path; final fileOnDevice = File('$appPath/$fileName'); final rawAssetFile = await rootBundle.load(fileName); final rawBytes = rawAssetFile.buffer.asUint8List(); await fileOnDevice.writeAsBytes(rawBytes, flush: true); return fileOnDevice; }
通过final dataFile = await getFile('assets/sample.txt');调用时,持续抛出异常:
PathNotFoundException: Cannot open file, path = '/var/mobile/Containers/Data/Application/352527E9-XXXX-XXXX-XXXX-DCFXXXXXXXXX/Library/Caches/assets/
已尝试的方法
- 确认Assets文件夹内文件名正确,且在组件、main函数等不同位置测试过代码
- 分别在Xcode和VS Code中运行项目
- 在Android模拟器和iPhone真机上测试代码
解决方案
核心问题是目标文件的父目录未创建:拼接路径时,assets子目录并不存在,直接写入文件会因目录缺失报错。
修改后的代码(需导入path包):
import 'dart:io'; import 'package:flutter/services.dart'; import 'package:path_provider/path_provider.dart'; import 'package:path/path.dart' as path; Future<File> getFile(String fileName) async { final appDir = await getTemporaryDirectory(); // 拼接完整目标路径 final targetFilePath = path.join(appDir.path, fileName); // 获取目标文件的父目录 final targetDir = path.dirname(targetFilePath); // 递归创建父目录(如果不存在) await Directory(targetDir).create(recursive: true); final fileOnDevice = File(targetFilePath); final rawAssetFile = await rootBundle.load(fileName); final rawBytes = rawAssetFile.buffer.asUint8List(); await fileOnDevice.writeAsBytes(rawBytes, flush: true); return fileOnDevice; }
额外检查项
- 确保
pubspec.yaml中正确声明Assets资源:flutter: assets: - assets/sample.txt - 执行
flutter clean后再运行flutter pub get,确保资源被正确打包到应用中
内容的提问来源于stack exchange,提问作者JengaAttack
相关产品推荐
相关产品推荐

