openWrite 抽象方法
为文件创建一个新的独立 IOSink。
当不再使用 IOSink 时,必须关闭它,以释放系统资源。
可以为文件以两种模式打开 IOSink:
- FileMode.write:将文件截断为零长度。
- FileMode.append:将初始写入位置设置为文件末尾。
通过返回的 IOSink 写入字符串时,将使用 encoding
指定的编码。返回的 IOSink 有一个 encoding
属性,可以在创建 IOSink 之后更改。
返回的 IOSink 不会将换行符 ("\n"
) 转换为平台的传统行结束符(例如,Windows 上的 "\r\n"
)。如果需要特定平台的行结束符,请写入 Platform.lineTerminator。
如果在打开或写入文件时发生错误,则 IOSink.done、IOSink.flush 和 IOSink.close 的 future 都会完成一个 FileSystemException。您必须处理来自 IOSink.done future 的错误,否则错误将不会被捕获。
例如,使用 FutureExtensions.ignore 忽略 IOSink.done 错误,并记得在 try
/catch
中 await
IOSink.flush 和 IOSink.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.flush 和 IOSink.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});