Flutter找不到txt文件

Flutter can't find txt file

我正在尝试使用 INI Package 来读取文件,但是当我试图通过读取其内容来访问该文件时,出现以下错误:没有这样的文件或目录。

错误代码如下:

class _FactsListScreenState extends State<FactsListScreen> {
  @override
  Widget build(BuildContext context) {
    File file = File("Assets/Facts/English.txt");
    Config config = Config.fromStrings(file.readAsLinesSync());
    print(config.sections());

有趣,但是使用 rootBundle.loadString("Assets/Facts/English.txt") 时有效,但使用 File("Assets/Facts/English.txt")

时无效

我还需要提及我是 运行 Android 模拟器上的应用程序,如果这有什么不同的话。

是的,我已将文件夹包含在 pubspec.yaml:

这是我的文件结构,表明该文件确实存在:

代码有什么问题?为什么找不到文件?

您只能将 pubspec 文件更改为:

Assets/

然后调用:

File file = File("Facts/English.txt");

将您的 Asset 目录重命名为 assets(小写)。因为根据 flutter 官方文档(名称库、包、目录和源文件使用 lowercase_with_underscores.fileextension)检查此 link 以供参考。

所以在你的情况下做以下事情:

1. Rename your Asset directory to assets 
2. Rename subdirectories to audio, facts
3. also rename file to english.txt 

使用像 thin 这样的字符串文件路径 'assets/facts/english.txt'

您不能使用 File 从资产中读取文件,因为 File 是对文件系统上文件的引用。您无法通过文件访问资产文件。 每当你尝试像

File file = File("Assets/Facts/English.txt");

它将尝试从设备而不是应用程序的资产文件夹中读取文件。

您可以使用以下函数从资源中创建文件。

Future<File> getImageFileFromAssets(String path) async {
  final byteData = await rootBundle.load('assets/$path');

   final file = File('${(await getTemporaryDirectory()).path}/$path');
    await file.writeAsBytes(byteData.buffer.asUint8List(byteData.offsetInBytes, byteData.lengthInBytes));

  return file;
}