当前位置: 首页 > 知识库问答 >
问题:

颤振-从资源中读取文本文件

逄皓轩
2023-03-14

我有一个文本文件(.txt),我想成为以后可以扫描的资源。

在pubspec.yaml,我已经确保:

flutter:
  assets:
    - res/my_file.txt

存在。该文件位于我创建的res/文件夹中,与lib/android/ios/处于同一级别

我试图从自定义类读取文件,而不是小部件。

根据文档,我将使用此导入:

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

然后开始这样读:

/// Assumes the given path is a text-file-asset.
Future<String> getFileData(String path) async {
  return await rootBundle.loadString(path);
}

要获得实际数据,请执行以下操作:

String data = await getFileData(fileName);

但是,当我使用文件名时,比如的资产/res/my_文件。txt',我得到一个错误:无法加载资产:资产/res/my_文件。txt

同样值得注意的是,我试图从单元测试中做到这一点。关于如何正确地做到这一点有什么想法吗?谢谢!


共有3个答案

李文轩
2023-03-14

在我看来,为了把JS文件加载到一个颤动中,你应该把它看作一个文本文件并适当地加载它。因此,您需要将该文件添加到assets文件夹,添加到pubspec文件中,然后加载它。在这里阅读完整答案

其次,您使用了evalJavascript。此功能可用于许多不同的情况。但只有当您有一个视图面板时,它才能工作。

检查下面的例子:

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';

main() async {
  String jsCode = await rootBundle.loadString('assets/javascript.js');

  runApp(new MaterialApp(
    home: LunchWebView(jsCode),
  ));
}

class LunchWebView extends StatelessWidget {
  final String text;
  LunchWebView(this.text);

  @override
  Widget build(BuildContext context) {
    final FlutterWebviewPlugin flutterWebviewPlugin = FlutterWebviewPlugin();
    flutterWebviewPlugin.launch('https://www.google.com');
    flutterWebviewPlugin.evalJavascript(text);
    return Container();
  }
}
鲁成天
2023-03-14

文件夹名“资产”并没有神奇地添加。更新您的pubspec。yaml以包括资产的完整路径。

flutter:
  assets:
    - assets/res/my_file.txt
南门欣怡
2023-03-14

这里有一个更完整的答案,供未来的游客参考。

在项目的根文件夹中创建资产文件夹。在Android Studio中,您可以右键单击项目大纲并转到“新建”

如果愿意,可以在assets中为文本文件创建另一个子文件夹。但是如果您这样做,您必须在pubspec中包含相对路径。亚马尔。见下文。

您只需将文本文件复制到assets目录中即可。my\u文件的相对路径。例如,txt将是资产/my_文件。txt

打开项目根目录中的pubspec.yaml文件。

向颤振部分添加资产小节,如下所示:

flutter:
  assets:
    - assets/my_file.txt

如果您想包含多个文件,那么您可以删除文件名,只需使用目录名(包括最终/):

flutter:
  assets:
    - assets/

您可以使用全局rootBundle获取文本文件资产:

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

Future<String> loadAsset() async {
  return await rootBundle.loadString('assets/my_text.txt');
}

或者,如果您有BuildContext(在小部件中),您可以使用DefaultAssetBundle。建议这样做,因为它允许在运行时切换资产包,这对多语言资产很有用。

Future<String> loadAsset(BuildContext context) async {
  return await DefaultAssetBundle.of(context).loadString('assets/my_text.txt');
}
  • 正在加载文本资源
  • 如何在应用程序中包含图像

 类似资料:
  • 我读过https://flutter.dev/docs/development/ui/assets-and-images#asset-包依赖项中的图像和从资产中读取的文本文件,并应用了所有这些,但我的代码仍然无法工作。。。。 我为此打开了一个新项目,在主文件夹中创建了资产和文件: 然后,不信任Android Studio,我检查了vi,在pubspec.yaml一切都好: 该文件以以下内容结尾:

  • 问题内容: 我正在尝试在Android Studio的res \ raw文件中保留一个.txt文件,并读取/解析该文件。我在“ res”目录(未创建)中创建的名为“ raw”的文件夹中有一个文件“ my_file.txt”。 我认为我的主要问题是:创建File对象(与Scanner对象一起使用)时,应该为文本文件传递什么路径? 这是我的代码: 问题答案: 认为您正在寻找符合以下条件的东西 其中ct

  • 问题内容: 我有一个XML文件,需要在Android SDK中进行解析。 如何从资源中读取XML文件路径? XML包含: 问题答案: 将其放在文件夹下。然后,您可以使用以下命令打开它: 这里有一个有关如何使用的示例: http://android-er.blogspot.com/2010/04/read-xml-resources-in-android- using.html

  • 我想从我的jar中读取一个资源,如下所示: 在Eclipse中运行它时工作良好,但如果我将它导出到一个jar中,然后运行它,就会出现一个IllegalArgumentException: 我真的不知道为什么,但通过一些测试我发现如果我改变 至 然后它的工作方式相反(它在jar中工作,但不能在eclipse中工作)。 我使用的是Eclipse,我的文件所在的文件夹位于类文件夹中。

  • 我有一个名为的项目,它有以下结构: 所以这两个文件的路径是: 我想读测试文件。TestDataProvider中的json。JAVA 我曾经用过 我看到从URL res=getClass(). getClassLoader(). getResources("testfile.json")返回; 有人能帮我吗?

  • 我很难弄清楚这个问题,我几乎什么都试过了。 我希望我的程序从Jar文件中读取两个资源,并且它将在eclipse中运行良好。但是当我从命令提示符运行jar时,它会给出空指针异常。 结构: src/main/java/App。JAVA src/main/resources/properties/application。属性 src/main/resources/spring/applicationCo