Dart 写入文件
最后修改日期:2024 年 1 月 28 日
在本文中,我们将展示如何在 Dart 语言中写入文件。
dart:io 包用于执行 IO 操作,包括写入文件。File 类包含用于操作文件及其内容的方法。
Dart 提供了同步和异步方法用于写入文件,例如 writeAsStringSync 和 writeAsString。
openWrite 函数为文件创建一个新的独立 IOSink。当不再使用时,必须显式关闭它,以释放系统资源。
Dart writeAsStringSync
writeAsStringSync 方法同步地将字符串写入文件。它会打开文件,以指定的编码写入字符串,然后关闭文件。
import 'dart:io';
void main() {
final fname = 'output.txt';
final f = new File(fname);
final data = 'an old falcon';
f.writeAsStringSync(data);
}
在程序中,我们同步地将一个字符串写入文件。如果文件不存在,则会创建文件。如果文件已存在,则会被覆盖。
import 'dart:io';
我们导入 dart:io 库。
final fname = 'output.txt'; final f = new File(fname);
我们创建了一个新的 File 实例。
final data = 'an old falcon'; f.writeAsStringSync(data);
我们将字符串写入文件。
Dart writeAsString
writeAsString 函数打开文件,以指定的编码写入字符串,然后关闭文件。它返回一个 Future<File>,该 Future 在整个操作完成后会以文件对象完成。
import 'dart:io';
void main() async {
final fname = 'output2.txt';
final f = new File(fname);
final data = 'a stormy night';
await f.writeAsString(data);
}
我们使用 writeAsString 函数将字符串写入文件。
void main() async {
由于我们使用了异步的 writeAsString 函数,因此必须在 main 函数声明中添加 async 关键字。
await f.writeAsString(data);
使用 await 关键字,我们可以获取异步操作的完成结果。
Dart writeAsBytesSync
writeAsBytesSync 成员函数同步地将字节列表写入文件。
import 'dart:io';
void main() {
final fname = 'bytes.txt';
final text = "one 🐘 and three 🐋";
final data = utf8.encode(text);
final f = new File(fname);
f.writeAsBytesSync(data);
}
在示例中,我们使用 writeAsBytesSync 将带有表情符号的文本消息写入文件。
final text = "one 🐘 and three 🐋";
我们有包含两个表情符号的文本。
final data = utf8.encode(text);
我们将文本编码为整数列表。
f.writeAsBytesSync(data);
编码后的文本被同步写入文件。
$ dart main.dart $ cat bytes.txt one 🐘 and three 🐋
Dart 获取图片
在下一个示例中,我们将从 URL 资源获取图片。
import 'dart:io';
import 'package:http/http.dart' as http;
void main() async {
final res = await http.get(Uri.http('webcode.me', '/favicon.ico'));
final bdata = res.bodyBytes;
final fname = 'favicon.ico';
final f = await File(fname);
await f.writeAsBytes(bdata);
}
该示例下载了一个小的 favicon。
import 'package:http/http.dart' as http;
要创建 HTTP GET 请求,我们使用 http 库。
final bdata = res.bodyBytes;
使用 bodyBytes,我们检索响应体中的字节。
final fname = 'favicon.ico'; final f = await File(fname);
我们创建 File 对象。
await f.writeAsBytes(bdata);
字节被写入文件。
Dart 追加到文件
在下一个示例中,我们将数据追加到文件。
import 'dart:io';
void main() async {
final fname = 'words.txt';
final words = ['cloud', 'blue', 'book', 'solid'];
final f = new File(fname);
for (final word in words) {
await f.writeAsString('$word\n', mode: FileMode.append);
}
}
要将数据追加到文件,我们使用 FileMode.append 模式。
Dart IOSink 写入
IOSink 的 write 方法将一个对象写入 sink。
import 'dart:io';
void main() {
final fname = 'test.txt';
final f = File(fname);
final sink = f.openWrite();
sink.write('current datetime: ${DateTime.now()}\n');
sink.close();
}
该示例将当前日期时间写入 sink。
final sink = f.openWrite();
从 File 对象,我们使用 openWrite 方法打开 sink。
sink.write('current datetime: ${DateTime.now()}\n');
数据通过 write 写入 sink。
sink.close();
我们关闭 IOSink 以释放系统资源。
Dart IOSink writeAll
IOSink 的 writeAll 函数会遍历给定的对象并将它们按顺序写入。
import 'dart:io';
void main() {
final fname = 'words2.txt';
final words = ['sky', 'ocean', 'pen', 'rock', 'storm', 'falcon'];
final f = File(fname);
final sink = f.openWrite();
sink.writeAll(words, "\n");
sink.close();
}
在示例中,我们使用 writeAll 将列表的内容写入 sink。
来源
在本文中,我们展示了如何在 Dart 中写入文件。
作者
列出 所有 Dart 教程。