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
相关产品推荐
相关产品推荐

