如何在 Dart 中逐行读取文件

2023-11-25

这个问题是一个问题的延续上一个问题。我编写了以下代码来确定是否File.openRead()创建了一个可以逐行流式传输的 Stream。事实证明答案是否定的。读取整个文件,然后传递到下一个转换。我的问题是:如何在 Dart 中逐行流式传输文件?

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


void main(List<String> arguments) {

  Stream<List<int>> stream = new File('Data.txt').openRead();

   stream
      .transform(const Utf8InterceptDecoder())
        .transform(const LineSplitterIntercept())
          .listen((line) {
//            stdout.writeln(line);
          }).asFuture().catchError((_) => print(_));
}

int lineSplitCount = 0;

class LineSplitterIntercept extends LineSplitter {

  const LineSplitterIntercept() : super();
  // Never gets called
  List<String> convert(String data) {
    stdout.writeln("LineSplitterIntercept.convert : Data:" + data);
    return super.convert(data);
  }

  StringConversionSink startChunkedConversion(ChunkedConversionSink<String> sink) {
    stdout.writeln("LineSplitterIntercept.startChunkedConversion Count:"+lineSplitCount.toString()+ " Sink: " + sink.toString());
    lineSplitCount++;
    return super.startChunkedConversion(sink);
  }
}

int utfCount = 0;

class Utf8InterceptDecoder extends Utf8Decoder {

  const Utf8InterceptDecoder() : super();

  //never gets called
  String convert(List<int> codeUnits) {
    stdout.writeln("Utf8InterceptDecoder.convert : codeUnits.length:" + codeUnits.length.toString());
    return super.convert(codeUnits);
  }


  ByteConversionSink startChunkedConversion(ChunkedConversionSink<String> sink) {
    stdout.writeln("Utf8InterceptDecoder.startChunkedConversion Count:"+ utfCount.toString() + " Sink: "+ sink.toString());
    utfCount++;
    return super.startChunkedConversion(sink);
  }
}

我认为这段代码很有用:

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

main() {
  final file = new File('file.txt');
  Stream<List<int>> inputStream = file.openRead();

  inputStream
    .transform(utf8.decoder)       // Decode bytes to UTF-8.
    .transform(new LineSplitter()) // Convert stream to individual lines.
    .listen((String line) {        // Process results.
        print('$line: ${line.length} bytes');
      },
      onDone: () { print('File is now closed.'); },
      onError: (e) { print(e.toString()); });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Dart 中逐行读取文件 的相关文章

随机推荐

  • 来自 UIImage 的数据 URL / PNG

    我有一个带有 UIImage 的 iPhone 程序 此 UIImage 需要传输到 UIWebView 中的 javascript Image 对象 我想这可以通过使用我发送到 UIWebView 的数据 url 来完成 如下所示 wvi
  • 在 if 语句中使用 && 运算符

    我有三个变量 VAR1 file1 VAR2 file2 VAR3 file3 如何使用和 if 语句中的 运算符如下所示 if f VAR1 f VAR2 f VAR3 then fi 当我编写这段代码时 它给出了错误 正确的方法是什么
  • 获取 lambda 表达式的 MethodInfo

    我知道我问的很奇怪 但只是为了好玩 是否有可能得到MethodInfo对于 lambda 表达式 我正在追求这样的事情 Func
  • iOS 5 中如何防止 Core Data 重复?

    我遇到了问题 周末我一直在做一个项目 我从 web 服务中提取一个大的 xml 它基本上有 3 层 客户 经理 员工 都是分层的 因此 应用程序第一次运行时 它会提取此 xml 并对其进行解析 并创建 3 个相关实体 客户 经理和员工 中的
  • unittest.py 与trace.py 不能很好地配合 - 为什么?

    哇 今晚我发现 Python 单元测试是使用unittest模块不能很好地进行覆盖率分析trace模块 这是最简单的单元测试 在foobar py import unittest class Tester unittest TestCase
  • 初始化空ByteArray

    如何在 Kotlin 中初始化一个空的 ByteArray 每当我尝试这样做时 val asdfasdf ByteArray 当我稍后尝试使用 asdfasdf 时 我被告知需要初始化它 mVisualizer getWaveForm as
  • 我可以使用什么工具在浏览器中测试 :contains() CSS3 伪类?

    我正在尝试开发与 Selenium 一起使用的 CSS 选择器 我特别想使用伪类 contains 尽管 W3 有一个带有 contains 的 CSS3 草案 但最终版本似乎并未包含它 我正在使用 Chrome 的工具来帮助我检查 CSS
  • 使用 PyGtk 时 GUI 未从另一个线程更新

    我正在使用 PyGTK 构建 GUI 应用程序 我想从另一个线程更新 textview 小部件 但每次我尝试更新时该小部件都没有更新 我应该怎么做才能获得可靠的 GUI 更新 GTK 不是线程安全的 因此您不应简单地从其他线程调用 GUI
  • 在 Android Activity 中打开网页时出现 net::ERR_ACCESS_DENIED Android 错误 [重复]

    这个问题在这里已经有答案了 打开 Android 活动时 Android 网页显示 net ERR ACCESS DENIED 嵌入网页标签 我尝试在 Android Manifest 中提供权限
  • 如何在同一个shell中执行bash脚本

    我有一个 bash 脚本 它调用三个不同的命令 并且执行必须在一个 shell 中进行 我通过在每个命令后添加 来得到它 如下所示 CMD1 CMD2 CMD3 现在我需要的是 假设我在 MAC 机器上打开一个终端 所有命令都应该在打开的
  • 如何强制 go mod 接受声明其路径与其 go.mod 不同的模块?

    当我跑步时go mod tidy 它破坏了 因为我的项目导入的包使用路径导入了另一个包github com coreos bbolt 但是当它从此路径获取包时go mod说它的路径是go etcd io bbolt 问题是导入包和导入包都是
  • 如何以编程方式读取 MSI 文件内的属性?

    有没有办法读取里面的属性MSI file 例如 给定一个名为测试包 msi 我需要找到 productName PackageCode version 我将把它与 WMI 卸载一起使用 string objPath string Forma
  • 为什么在放弃泛型运算符时无法推断类型[重复]

    这个问题在这里已经有答案了 我读到 从 Java 7 开始 像第一个语句一样在右侧指定类型来创建集合是不好的风格 因为编译器可以从左侧推断类型 List
  • 方形拼图解决方案

    Question given an integer number n print the numbers from 1 up to n2 like this n 4 结果是 01 02 03 04 12 13 14 05 11 16 15
  • 函数调用中的 C++ 临时对象生命周期

    当我们通过原始指针或引用将临时智能指针管理的对象传递给函数时 标准是否保证该对象的生存期将延长到函数的生存期 include
  • JQuery JEditable - 如何禁用点击编辑

    我想知道您是否可以停止点击时编辑文本 我有一个单独的编辑按钮来使文本可编辑 这是我希望用户能够编辑文本的唯一方法 因此想要关闭单击编辑吗 有任何想法吗 布里特是对的 添加一个自定义事件 然后用按钮触发它 这是一些代码来解释它 自定义事件 i
  • 使用 N-API 将数据流式传输到 Node.js C++ 插件

    我正在为 NodeJS 构建一个 C 插件 我想将数据从 C 异步流式传输到 Node 我找到了这篇文章 https nodeaddons com streaming data into a node js c addon 然而 我想使用
  • Django:HttpResponseRedirect 不起作用

    我是 Python Django 和整体编程的新手 我需要有关 HttpResponseRedirect 的帮助 因为它在我的登录视图中不起作用 它确实可以在我的主视图文件中工作 但不是我想要的方式 我没有重定向到所需的页面 而是只在同一页
  • 如何在API平台上保存与实体的嵌套关系

    我有两个实体 Question and 选择其中 Question 与 Alternative 有 OneToMany 关系 我正在尝试发送带有嵌套文档的 JSON选择通过 POST 到QuestionAPI 平台 API 平台返回以下错误
  • 如何在 Dart 中逐行读取文件

    这个问题是一个问题的延续上一个问题 我编写了以下代码来确定是否File openRead 创建了一个可以逐行流式传输的 Stream 事实证明答案是否定的 读取整个文件 然后传递到下一个转换 我的问题是 如何在 Dart 中逐行流式传输文件