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 任务都将完成 FileSystemException。您必须处理从 IOSink.done 未来的错误,否则错误将未被捕获。
例如,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 上下文之外异步的错误,您可以在 IOSink.done 上 Future.catchError。
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});