openWrite 抽象方法

IOSink openWrite({
  1. FileMode mode = FileMode.write,
  2. Encoding encoding = utf8,
})

为文件创建一个新的独立 IOSink

当不再使用 IOSink 时,必须关闭它,以释放系统资源。

可以为文件以两种模式打开 IOSink

通过返回的 IOSink 写入字符串时,将使用 encoding 指定的编码。返回的 IOSink 有一个 encoding 属性,可以在创建 IOSink 之后更改。

返回的 IOSink 不会将换行符 ("\n") 转换为平台的传统行结束符(例如,Windows 上的 "\r\n")。如果需要特定平台的行结束符,请写入 Platform.lineTerminator

如果在打开或写入文件时发生错误,则 IOSink.doneIOSink.flushIOSink.close 的 future 都会完成一个 FileSystemException。您必须处理来自 IOSink.done future 的错误,否则错误将不会被捕获。

例如,使用 FutureExtensions.ignore 忽略 IOSink.done 错误,并记得在 try/catchawait IOSink.flushIOSink.close 调用。

final sink = File('/tmp').openWrite(); // Can't write to /tmp
sink.done.ignore();
sink.write("This is a test");
try {
  // If one of these isn't awaited, then errors will pass silently!
  await sink.flush();
  await sink.close();
} on FileSystemException catch (e) {
  print('Error writing file: $e');
}

要处理在 IOSink.flushIOSink.close 的上下文之外异步的错误,您可以 Future.catchError IOSink.done

final sink = File('/tmp').openWrite(); // Can't write to /tmp
sink.done.catchError((e) {
 // Handle the error.
});

实现

IOSink openWrite({FileMode mode = FileMode.write, Encoding encoding = utf8});