gpt4 book ai didi

android - 如何从 Flutter 中的 Assets 中读取 .txt 文件?

转载 作者:IT王子 更新时间:2023-10-29 06:53:12 25 4
gpt4 key购买 nike

我有一个 .txt Flutter 项目中我的文件夹 assets 中的文件,当应用程序在设备上打开时 SQFlite数据库已创建,应从此文件行中读取以将它们插入数据库中。我需要阅读 .txt 的每一行文件并将它们添加到 List<String>像这样:

List<String> _list = await new File('$dir/assets/file.txt').readAsLines();

我尝试使用 rootBundle但我无法将结果转换为 File并尝试像这样直接打开文件:

String dir = (await getApplicationDocumentsDirectory()).path;

我总是找不到文件并报错。

var byte = await rootBundle.load('assets/bot.txt'); // Can't convert it to file
String dir = (await getApplicationDocumentsDirectory()).path;
List<String> _list = await new File('$dir/assets/file.txt').readAsLines(); // Error

error FileSystemException: Cannot open file, path = '/data/user/0/com.example.animationexp/app_flutter/assets/file.txt' (OS Error: No such file or directory, errno = 2) during open, closing...

是否有打开和阅读此文件的解决方案?

最佳答案

它不起作用,因为您假设您的 assets 目录位于 ApplicationDocumentsDirectory,然后您加入了这两个目录并在不存在的路径中查找文件.

相反,您应该将文件保存到磁盘的已知路径中,然后从该路径获取File:

Future<List<String>> getFileLines() async {
final data = await rootBundle.load('assets/bot.txt');
final directory = (await getTemporaryDirectory()).path;
final file = await writeToFile(data, '$directory/bot.txt');
return await file.readAsLines();
}

Future<File> writeToFile(ByteData data, String path) {
return File(path).writeAsBytes(data.buffer.asUint8List(
data.offsetInBytes,
data.lengthInBytes,
));
}

但是,如果您的文件只是一个简单的文本文件,您应该尝试 Julien Lachal's方法。请记住,rootBundle.loadString() 不适用于大多数文件格式。

关于android - 如何从 Flutter 中的 Assets 中读取 .txt 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56186560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com