ZetCode

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 的 FileMode 类,并提供了实际示例,展示了不同的文件访问模式及其适用的用例。

作者

我的名字是 Jan Bodnar,我是一位充满热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 Dart 教程