Flutter似乎无法从相对路径中找到Json文件

41zrol4v  于 2023-01-06  发布在  Flutter
关注(0)|答案(3)|浏览(208)

如果这是一个愚蠢的问题,我先向你道歉,我已经创建了一个文件并将其存储在我的"assets"子目录中,它与我的lib目录和pubspec.yaml文件处于同一级别,我已经在代码中设置了"assets/ExerData.json"的相对路径(见下文)。
当我运行保存为如下所示的scratch.dart文件的代码,连接到Galaxy Nexus API 29模拟器时,它只能告诉我"找不到文件!"

import 'dart:io';

import 'package:flutter/services.dart';

String filePath = "assets/ExerData.json";

void main() {
  performTasks();
}

void performTasks() {
  if (checkFileExists(filePath)) {
    readFile(filePath);
  } else {
    print("Can't find file");
  }
}

bool checkFileExists(path) {
  bool result = File(path).existsSync();
  print(result.toString());
  return result;
}

Future<String> readFile(path) async {
  return await rootBundle.loadString(filePath);
}

我用以下条目填充了我的pubspec.yaml文件:

assets:
  - assets/ExerData.json

我期望它找到我的文件,使用rootbundle.loadstring(path)读取它,并将结果字符串打印到控制台。
正如我所说,它所做的只是打印"找不到文件"。
我非常感谢你在这件事上的帮助!
先谢了!

h43kikqp

h43kikqp1#

事实证明,程序逻辑还没有完成必要绑定的初始化。
我在主类的第一行调用了方法WidgetsFlutterBinding.ensureInitialized(),一切都开始按预期工作。
感谢每一个看过我问题的人!
下面是一个与绑定XML文件有关的类似问题:如何在flutter中读取XML文件?

t5zmwmid

t5zmwmid2#

rootBundle包含生成应用程序时随应用程序打包的资源。在pubspec中的assets:下指定的所有文件都随应用程序打包。你可以通过将rootBundle.loadString() Package 在try{} catch(){}块中来检查文件是否存在。

Future<bool> fileExists(String path) async {
    try {
      await rootBundle.loadString(path);
    } catch (_) {
      return false;
    }
    return true;
  }

Future<String?> loadFile(String path) async {
    try {
      return await rootBundle.loadString(path);
    } catch (_) {
      // File not found Exception
      return null;
    }
  }

文件是dart类。它需要读取文件的绝对或相对路径。您可以将Filepath_provider一起使用,以从当前文件系统获取绝对路径。
例如,在Android上:

Future<void> getPath() async {
    Directory appDocDir = await getApplicationDocumentsDirectory();
    String appDocPath = appDocDir.path;
    print('PATH IS : $appDocPath');
  }

印刷品
'/data/user/0/com.soliev.file_demo/app_flutter'

pgccezyw

pgccezyw3#

用途:

String data = await DefaultAssetBundle.of(context).loadString("assets/ExerData.json");
final jsonResult = jsonDecode(data);

参考:How to load JSON assets into a Flutter App?

相关问题