Dart 读取文件
最后修改日期:2024 年 1 月 28 日
本文介绍如何在 Dart 语言中读取文件。我们读取文本文件和二进制文件。
dart:io 包用于执行 IO 操作,包括读取文件。File 类包含操作文件及其内容的方法。
可以使用 try/catch 关键字来处理可能的 IO 异常。
请注意,不应将 readAsString 和 readAsStringSync 用于读取大文件。
sky blue cup cloud water war pen dog
这是一个简单的文本文件。
Dart 使用 readAsString 读取文件
readAsString 方法使用指定的编码将整个文件内容读取为字符串。编码默认为 utf-8。它返回一个 Future<String>,一旦文件内容被读取,该 Future 就会以字符串形式完成。
import 'dart:io';
void main() async {
var path = 'words.txt';
try {
var file = File(path);
var contents = await file.readAsString();
print(contents);
} catch (e) {
stderr.writeln('failed to read file: \n${e}');
}
}
在示例中,我们使用 readAsString 读取一个文本文件。我们使用 try/catch 关键字显式处理异常。
import 'dart:io';
我们导入 dart:io 包。
var file = File(path);
创建一个 File 对象。
var contents = await file.readAsString();
我们使用 readAsString 方法读取文件内容。使用 await,我们等待异步操作完成。
$ dart main.dart sky blue cup cloud water war pen dog
Dart 使用 readAsStringSync 读取文件
readAsStringSync 同步地将给定文件的内容读取到字符串中。
import 'dart:io';
void main() {
var fileName = 'words.txt';
var contents = File(fileName).readAsStringSync();
print(contents);
}
该示例使用 readAsStringSync 读取文本文件。
Dart 自我读取文件
下一个程序读取其自身的内容。
import 'dart:convert';
import 'dart:io';
void main() async {
var file = File(Platform.script.toFilePath());
print(await (file.readAsString(encoding: ascii)));
}
我们使用 Platform.script.toFilePath 确定程序文件名,然后使用 readAsString 读取内容。
$ dart main.dart
import 'dart:convert';
import 'dart:io';
void main() async {
var file = File(Platform.script.toFilePath());
print(await (file.readAsString(encoding: ascii)));
}
Dart 使用 readAsLines 读取文件
使用 readAsLines,我们逐行异步读取文件。该方法返回一个解析为字符串列表的 Future。
import 'dart:io';
void main() {
var fileName = 'words.txt';
var myFile = new File(fileName);
myFile.readAsLines().then((lines) => lines.forEach((line) => print(line)));
}
该示例逐行异步读取文本文件。
myFile.readAsLines().then((lines) => lines.forEach((line) => print(line)));
在这里,我们使用回调函数来处理行。
在下一个示例中,我们使用 async/await 语法。
import 'dart:io';
void main() async {
var fileName = 'words.txt';
var myFile = new File(fileName);
var lines = await myFile.readAsLines();
lines.forEach((line) {
print(line);
});
}
程序使用 readAsLines 读取文件;它使用 async/await 语法。
Dart 使用 readAsLinesSync 读取文件
readAsLinesSync 同步地逐行读取文件。它返回一个字符串列表。
import 'dart:io';
void main() {
var fileName = 'words.txt';
var myFile = new File(fileName);
List<String> lines = myFile.readAsLinesSync();
lines.forEach((line) => print(line));
}
该程序以同步方式逐行读取文本文件。
Dart 使用 Stream 读取文件
下一个程序使用 Stream 读取文件。
import 'dart:convert';
import 'dart:io';
void main() {
var fileName = 'words.txt';
Stream<List<int>> stream = new File(fileName).openRead();
StringBuffer buffer = new StringBuffer();
stream.transform(utf8.decoder).transform(LineSplitter()).listen((line) {
buffer.writeln("${line}");
}, onDone: () => print(buffer.toString()), onError: (e) => print(e));
}
我们使用 Stream 和 StringBuffer 读取文本文件。
Stream<List<int>> stream = new File(fileName).openRead();
我们使用 openRead 打开一个流。
StringBuffer buffer = new StringBuffer();
我们将数据写入 StringBuffer。
stream.transform(utf8.decoder).transform(LineSplitter()).listen((line) {
buffer.writeln("${line}");
}, onDone: () => print(buffer.toString()), onError: (e) => print(e));
我们使用解码器和行分隔符转换流。最后一行被写入缓冲区。最后,缓冲区被打印到控制台。
Dart 读取二进制文件
readAsBytes 方法将整个文件内容读取为字节列表。它返回一个 Future<Uint8List>。
import 'dart:convert';
import 'dart:io';
import 'package:collection/collection.dart';
void main() async {
var fileName = 'favicon.ico';
var bytes = await File(fileName).readAsBytes();
String base64Image = base64.encode(bytes);
print(base64Image);
var output = bytes
.mapIndexed((idx, e) => e.toRadixString(16).padLeft(2, '0'))
.join(' ');
print(output);
}
在程序中,我们读取了一个小的 favicon 文件。
var bytes = await File(fileName).readAsBytes();
我们将文件读取到字节列表中。
String base64Image = base64.encode(bytes);
我们将字节编码为 base64 编码。
var output = bytes
.mapIndexed((idx, e) => e.toRadixString(16).padLeft(2, '0'))
.join(' ');
或者,我们将字节转换为十六进制数字。
来源
在本文中,我们展示了如何在 Dart 中读取文件。
作者
列出 所有 Dart 教程。