You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中使用File()读取assets文件报错PathNotFoundException求助

解决Flutter读取assets文件时的PathNotFoundException错误

你遇到的问题核心在于:Flutter的assets文件是嵌入到应用包中的资源,并非设备文件系统里的独立文件,所以直接用File类通过相对路径访问必然会触发找不到文件的错误。

正确的读取方式

使用Flutter提供的rootBundle或DefaultAssetBundle来读取assets内容,步骤如下:

  1. 导入必要的包
import 'package:flutter/services.dart';
  1. 使用rootBundle读取文件内容(适用于无上下文的场景)
void readSlantFile() async {
  try {
    String fileContent = await rootBundle.loadString('assets/smslant.flf');
    // 在这里处理读取到的文件内容
  } catch (e) {
    print('读取失败: $e');
  }
}
  1. 使用DefaultAssetBundle读取(更推荐,适配有上下文的场景)
// 需要在有BuildContext的环境中调用
void readSlantFileWithContext(BuildContext context) async {
  try {
    String fileContent = await DefaultAssetBundle.of(context).loadString('assets/smslant.flf');
    // 处理文件内容
  } catch (e) {
    print('读取失败: $e');
  }
}

为什么之前的方法无效

  • path_provider获取的是设备上应用的文档、缓存等目录路径,assets并不在这些位置
  • 文件选择器是用于选取设备本地存储的文件,无法访问嵌入在应用包内的assets资源

额外检查项

  • 确认pubspec.yaml中的assets配置缩进正确(YAML对缩进要求严格,可重新执行flutter pub get确保配置生效)
  • 检查文件名大小写是否与实际文件一致(部分平台对文件路径大小写敏感)
  • 如果文件较大,可使用load方法读取字节数据:
ByteData data = await rootBundle.load('assets/smslant.flf');
List<int> bytes = data.buffer.asUint8List();
// 处理字节数据

内容的提问来源于stack exchange,提问作者bnorum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 14:42:41