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

Flutter读取JSON文件报错OS Error: No such file or directory(errno=2)求助

问题排查与修复方案

问题原因

  • 路径逻辑错误:你用getApplicationDocumentsDirectory()获取的是应用的私有文档存储目录(路径为/data/user/0/(censored)/app_flutter),但你的equipment_care.json是放在项目源码的lib/layers目录下,这两个目录完全无关,所以拼接后的路径必然找不到文件。
  • 未配置静态资源:项目源码中的静态文件需要通过Flutter的asset机制配置,否则打包时不会被包含到应用安装包中,运行时自然无法访问。

修复步骤

1. 配置pubspec.yaml,将json文件声明为asset

在项目根目录的pubspec.yaml文件中,找到flutter节点,添加assets配置(注意缩进要和同级节点一致):

flutter:
  # 保留原有配置(如uses-material-design等)
  assets:
    - lib/layers/equipment_care.json

配置完成后执行flutter pub get使配置生效。

2. 修改代码,通过rootBundle读取asset资源

替换原来的文件读取逻辑,使用Flutter的rootBundle读取打包后的静态资源:

import 'package:flutter/services.dart' show rootBundle;

// 替换原有的readCounter方法
Future<String> readEquipmentCareData() async {
  try {
    // 直接读取asset路径下的文件
    final String jsonContent = await rootBundle.loadString('lib/layers/equipment_care.json');
    return jsonContent;
  } catch (e) {
    print('读取失败: $e');
    return "";
  }
}

@override
Widget build(BuildContext context) {
  readEquipmentCareData().then((value) {
    print(value);
  });
  return Container(
    child: Scaffold(
      appBar: _appBar(),
      body: _body(),
    ),
  );
}

补充说明

如果你的需求是需要修改这个json文件的内容(而非仅读取静态数据),则需要先将asset中的文件复制到getApplicationDocumentsDirectory()对应的目录,之后再通过File类操作:

  1. 先通过rootBundle读取asset内容
  2. 将内容写入到文档目录的对应文件中
  3. 后续读写操作针对文档目录的文件

但从你的场景来看,只是为了存放静态数据优化代码可读性,直接使用asset方案更简单高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:37:48