You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart创建文件后无法回读 无报错无输出代码问题排查

问题原因

你代码里的核心问题是没有意识到IOSink.close()是异步操作:

  • 调用sink.close()时仅仅是触发了流关闭、缓冲区刷盘的流程,该方法返回Future对象,流程不会阻塞等待写入完成
  • 你没有等待该Future执行完成就立刻调用同步方法读取文件,此时文件内容还未完全写入磁盘,自然读不到预期数据
  • 整个流程中异步写入的错误没有被捕获,所以全程不会抛出任何错误提示
修复方式

根据你的代码场景二选一即可:

异步实现(适配原有openWrite逻辑)

将main函数改为异步入口,等待流关闭完成后再执行读取:

import 'dart:io';

void main() async {
  var f1 = File('file1.txt');
  var sink = f1.openWrite();
  sink.write('my line of data 1\n');
  sink.write('my line of data 2\n');

  await sink.close(); // 等待写入完成、资源释放完毕
   
  var ins = File('file1.txt').readAsLinesSync();
  for (var l in ins) {
    print(l);
  }
}

同步实现(全链路同步无异步逻辑,更适合简单中间文件写入场景)

直接使用文件的同步写入方法,不需要手动处理流关闭逻辑,写入完成后内容直接落盘:

import 'dart:io';

void main() {
  var f1 = File('file1.txt');
  // 同步写入字符串内容,执行完即落盘
  f1.writeAsStringSync('my line of data 1\nmy line of data 2\n');
   
  var ins = File('file1.txt').readAsLinesSync();
  for (var l in ins) {
    print(l);
  }
}

补充:原代码中导入的dart:async、dart:convert在当前场景下没有被使用,可以移除。

内容的提问来源于stack exchange,提问作者Bid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 16:15:37