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;
}
我正在尝试使用 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;
}