ZetCode

Dart 文件类

最后修改于 2025 年 4 月 4 日

Dart 中的 File 类提供了用于处理文件的各种方法。它允许读取、写入和操作文件内容及元数据。

文件操作默认是异步的,使用 Dart 的 Future API。该类是 Dart dart:io 库的一部分,用于服务器端应用程序。

基本定义

File 代表文件系统中的文件引用。它为文件操作提供了同步和异步方法。

主要功能包括读/写文本/二进制数据、文件元数据访问以及文件操作,如复制或删除。它支持相对路径和绝对路径。

读取文本文件

此示例展示了如何异步读取文本文件的内容。

main.dart
import 'dart:io';

void main() async {
  var file = File('example.txt');
  
  try {
    var contents = await file.readAsString();
    print(contents);
  } catch (e) {
    print('Error reading file: $e');
  }
}

我们创建一个指向 'example.txt' 的 File 对象,然后读取其内容。readAsString() 方法返回一个 Future,该 Future 在获取文件文本时完成。

$ dart main.dart
Hello from example.txt

写入文件

此示例演示了如何异步将文本写入文件。

main.dart
import 'dart:io';

void main() async {
  var file = File('output.txt');
  
  try {
    await file.writeAsString('Dart File example\n', mode: FileMode.append);
    print('File written successfully');
  } catch (e) {
    print('Error writing file: $e');
  }
}

我们在追加模式下打开 'output.txt' 并添加一行文本。FileMode.append 确保新内容被添加到末尾,而不是覆盖现有数据。

$ dart main.dart
File written successfully

读取文件元数据

此示例展示了如何获取文件信息。

main.dart
import 'dart:io';

void main() async {
  var file = File('example.txt');
  
  try {
    var stat = await file.stat();
    print('File size: ${stat.size} bytes');
    print('Modified: ${stat.modified}');
    print('Accessed: ${stat.accessed}');
  } catch (e) {
    print('Error getting file stats: $e');
  }
}

stat() 方法返回一个包含文件元数据的 FileStat 对象。这包括文件大小、修改时间和访问时间信息。

$ dart main.dart
File size: 24 bytes
Modified: 2025-04-04 10:30:45.000
Accessed: 2025-04-04 10:35:12.000

复制和删除文件

此示例演示了文件操作。

main.dart
import 'dart:io';

void main() async {
  var source = File('source.txt');
  var dest = File('backup.txt');
  
  try {
    await source.copy(dest.path);
    print('File copied successfully');
    
    await dest.delete();
    print('Backup file deleted');
  } catch (e) {
    print('Error manipulating files: $e');
  }
}

我们将 source.txt 复制到 backup.txt,然后删除备份文件。这两个操作都是异步的,并且返回一个在完成时完成的 Future。

$ dart main.dart
File copied successfully
Backup file deleted

读取二进制数据

此示例展示了如何将文件读取为字节。

main.dart
import 'dart:io';

void main() async {
  var file = File('image.png');
  
  try {
    var bytes = await file.readAsBytes();
    print('Read ${bytes.length} bytes');
    print('First byte: ${bytes[0]}');
  } catch (e) {
    print('Error reading binary file: $e');
  }
}

readAsBytes() 方法将整个文件读取到 Uint8List 中。这对于二进制文件(如图像)非常有用,因为不适合文本读取。

$ dart main.dart
Read 1024 bytes
First byte: 137

最佳实践

来源

Dart 文件文档

本教程通过实际示例介绍了 Dart 的 File 类,展示了常见的​​文件操作,包括读取、写入和文件操作。

作者

我叫 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出 所有 Dart 教程