Dart FileMode
最后修改于 2025 年 4 月 4 日
Dart 中的 FileMode 类定义了文件打开模式的常量。它与文件操作一起使用,以指定文件的打开方式。
FileMode 对于控制文件访问权限和行为至关重要。它是 Dart 中用于文件系统操作的 dart:io 库的一部分。
基本定义
FileMode 是一个类似枚举的类,其中包含文件操作的常量。它决定是读取、写入、追加还是创建文件。
主要模式包括读取、写入、追加和仅写入。这些模式控制文件访问以及是创建文件还是截断现有文件。
读取文件
此示例显示如何使用 FileMode.read 以只读模式打开文件。
main.dart
import 'dart:io';
void main() async {
var file = File('example.txt');
try {
var contents = await file.open(mode: FileMode.read);
var stream = contents.transform(utf8.decoder);
await for (var line in stream) {
print(line);
}
await contents.close();
} catch (e) {
print('Error: $e');
}
}
我们以读取模式打开文件,并将其内容读取为流。FileMode.read 确保我们只对文件具有读取访问权限。此模式要求文件必须存在。
$ dart main.dart Hello, Dart! This is a test file.
写入文件
此示例演示了如何使用 FileMode.write 向文件写入内容。
main.dart
import 'dart:io';
void main() async {
var file = File('output.txt');
try {
var sink = file.openWrite(mode: FileMode.write);
sink.write('First line\n');
sink.write('Second line\n');
await sink.close();
print('File written successfully');
} catch (e) {
print('Error: $e');
}
}
FileMode.write 以写入模式打开文件,如果需要则创建文件。如果文件存在,则先将其截断为零长度。我们使用 openWrite 以方便操作。
$ dart main.dart File written successfully
追加到文件
此示例显示了如何向现有文件追加内容。
main.dart
import 'dart:io';
void main() async {
var file = File('log.txt');
try {
var sink = file.openWrite(mode: FileMode.append);
sink.write('${DateTime.now()}: New log entry\n');
await sink.close();
print('Log entry added');
} catch (e) {
print('Error: $e');
}
}
FileMode.append 以写入模式打开文件,并在末尾进行写入。如果文件不存在,则会创建它。现有内容会被保留,新内容会添加到末尾。
$ dart main.dart Log entry added
读写访问
此示例演示了如何以读写模式打开文件。
main.dart
import 'dart:io';
void main() async {
var file = File('data.txt');
try {
var raf = await file.open(mode: FileMode.writeOnlyAppend);
await raf.writeString('Initial content\n');
await raf.close();
raf = await file.open(mode: FileMode.readWrite);
var content = await raf.readString();
await raf.writeString('Additional content\n');
await raf.close();
print('Updated content:\n$content');
} catch (e) {
print('Error: $e');
}
}
FileMode.readWrite 允许对文件进行读取和写入。文件指针从开头开始,使我们能够在写入之前读取现有内容。
$ dart main.dart Updated content: Initial content
独占文件创建
此示例显示了如何独占创建新文件。
main.dart
import 'dart:io';
void main() async {
var file = File('newfile.txt');
try {
var raf = await file.open(mode: FileMode.writeOnly);
await raf.writeString('This is a new file\n');
await raf.close();
print('File created exclusively');
} on FileSystemException catch (e) {
print('Error: ${e.message}');
}
}
FileMode.writeOnly 创建一个新文件,如果文件已存在则会失败。当您需要确保不覆盖现有文件时,这非常有用。
$ dart main.dart File created exclusively
最佳实践
- 请仔细选择: 选择符合您需求的模式
- 错误处理: 始终处理潜在的文件系统错误
- 资源清理: 完成后关闭文件以释放资源
- 原子操作: 使用适当的模式以确保数据安全
来源
本教程涵盖了 Dart 的 FileMode 类,并提供了实际示例,展示了不同的文件访问模式及其适用的用例。
作者
列出 所有 Dart 教程。