【问题标题】:Read a file in dart 2 with dart:io library使用 dart:io 库读取 dart 2 中的文件
【发布时间】:2018-10-10 12:32:58
【问题描述】:

我是飞镖语言的新手。

我想使用库 dart:io 读取文件 (test.txt)。我的第一次尝试基于此链接: https://v1-dartlang-org.firebaseapp.com/dart-vm/io-library-tour

但是通过这些尝试,我在尝试读取文件时仍然收到错误,我没有找到任何相关信息,所以我在这里问,有没有人有任何解决方案或任何想法可能是什么问题?

这是我尝试读取的代码和文件(以 UTF-8 编码)。

configReader.dart

import 'dart:io';
import 'dart:convert';

class ConfigReader{

  ConfigReader(){
    var configFile = new File("test.txt");
    var text;
    configFile.readAsLines(encoding : Encoding.getByName("utf-8"));
  }

}

test.txt

line1
line2
line3
line4

我得到的错误:

异常:不支持的操作:_Namespace STACKTRACE: dart:sdk_internal
readAsLines 包:insightos/src/utils/init/configReader.dart 11:15
新包:insightos/src/utils/init/utils.dart 35:5
获取主机包:insightos/src/utils/init/utils.dart 72:13
获取SandayaNewEndpointService 包:insightos/src/utils/linker/query_factory.dart 52:21 loadClientConfiguration dart:sdk_internal
异步包:insightos/src/utils/linker/query_factory.dart 51:70 加载客户端配置 包:insightos/src/utils/init/authenticator.dart 85:65 initApp dart:sdk_internal 异步 包:insightos/src/utils/init/authenticator.dart 83:44 initApp 包:insightos/src/utils/init/authenticator.dart 66:7
initAuthentication 包:stack_trace
arg 包:angular/src/core/zone/ng_zone.dart 190:16 arg dart:sdk_internal runUnary 包:angular/src/core/zone/ng_zone.dart 187:18
[_runUnary] dart:sdk_internal
.scheduleMicrotask.dart.fn 包:angular/src/core/zone/ng_zone.dart 163:9
safeMicrotask 包:stack_trace
parent.registerCallback.dart.fn 包:angular/src/core/zone/ng_zone.dart 178:16
parent.run.dart.fn dart:sdk_internal
运行包:angular/src/core/zone/ng_zone.dart 175:18
[_运行]

包:insightos/src/utils/linker/query_factory.dart 51:70 加载客户端配置 包:insightos/src/utils/init/authenticator.dart 85:65 initApp dart:sdk_internal 异步 包:insightos/src/utils/init/authenticator.dart 83:44 initApp 包:insightos/src/utils/init/authenticator.dart 66:7
initAuthentication 包:stack_trace
arg 包:angular/src/core/zone/ng_zone.dart 190:16 arg dart:sdk_internal runUnary 包:angular/src/core/zone/ng_zone.dart 187:18
[_runUnary] dart:sdk_internal
.scheduleMicrotask.dart.fn 包:angular/src/core/zone/ng_zone.dart 163:9
safeMicrotask 包:stack_trace
parent.registerCallback.dart.fn 包:angular/src/core/zone/ng_zone.dart 178:16
parent.run.dart.fn dart:sdk_internal
运行包:angular/src/core/zone/ng_zone.dart 175:18
[_运行]

dart:sdk_internal
异步包:insightos/src/utils/init/authenticator.dart 61:40
initAuthentication 包:insightos/src/utils/init/authenticator.dart 58:5 ngOnInit 包:insightos/src/components/app_bar/app_bar.template.dart 471:25 detectChanges内部包:angular/src/core/linker/app_view.dart 398:7 检测变化 包:insightos/src/utils/app/insightOS.template.dart 366:16
detectChanges内部包:angular/src/core/linker/app_view.dart 398:7 检测变化 包:insightos/src/utils/app/insightOS.template.dart 413:16
detectChanges内部包:angular/src/core/linker/app_view.dart 398:7 检测变化 包:angular/src/core/linker/view_ref.dart 106:12
detectChanges 包:angular/src/core/change_detection/host.dart 168:18 [_runTick] 包:angular/src/core/change_detection/host.dart 144:15
勾选包:angular/src/core/application_ref.dart 108:5
[_loadedRootComponent] 包:angular/src/core/application_ref.dart 96:27
src__runtime__optimizations.unsafeCast.run.dart.fn 包:angular/src/core/change_detection/host.dart 250:18
runInZone.dart.fn 包:angular/src/core/zone/ng_zone.dart 178:16
parent.run.dart.fn dart:sdk_internal
运行包:angular/src/core/zone/ng_zone.dart 175:18
[_run] dart:sdk_internal
运行包:angular/src/core/zone/ng_zone.dart 327:22
运行包:angular/src/core/application_ref.dart 140:51
runInZone 包:angular/src/core/change_detection/host.dart 248:5
运行包:angular/src/core/application_ref.dart 69:23
引导程序包:angular/src/bootstrap/run.dart 188:16
runApp main.dart 8:3
主要 main.dart.bootstrap.js 788:12

【问题讨论】:

  • pub.dartlang.org/packages/path_provider 允许您获取应用程序可以读写的有效目录的路径。你认为new File("test.txt") 来自哪里?
  • 它们在同一个文件夹中,所以我认为它会像在 Python 中一样抓取它,而 v1-dartlang-org.firebaseapp.com/dart-vm/io-library-tour 的示例我将尝试这样做,谢谢。
  • 它看起来需要 SDK 版本
  • 好吧,我想我只是在同一个链接Important: Only Flutter mobile apps, command-line scripts, and servers can import and use dart:io, not web apps. 上读到了一些东西,我想我需要找到另一种读取文件的方法,而不是使用这个库
  • 这与 Angular 有什么关系?您是否尝试从 Angular 和 Flutter 之间共享的代码中读取文件?

标签: angular file io dart angular-dart


【解决方案1】:

Flutter web 不支持dart:io。相反,您需要dart:html

解决方案

readFile(String path) async{
    var request = await HttpRequest.request(path);
    var response = request.response;
    
    return response;
}

出于上下文的考虑,我使用它来读取 .svg 文件作为字符串。为了您的使用,您需要像这样修改方法:

readFile(String path) async{
    var request = await HttpRequest.request(path);
    var response = request.response;
    var lines = LineSplitter.split(response);

    //lines is an SyncIterable<String> but can be converted to a List<String>
    return lines;
}

【讨论】:

    猜你喜欢
    • 2014-04-02
    • 2021-10-02
    • 1970-01-01
    • 2012-05-14
    • 2023-04-05
    • 2021-03-03
    • 2021-09-19
    • 1970-01-01
    • 2019-02-20
    相关资源
    最近更新 更多