ZetCode

Dart 目录

最后修改于 2025 年 4 月 4 日

Dart 中的 Directory 类提供了用于处理文件系统目录的操作。它是 Dart 的 dart:io 库的一部分。

目录支持创建、列出、删除和检查目录属性。它对文件操作支持同步和异步。

基本定义

Directory 代表文件系统中的一个目录。它提供了用于操作目录及其内容的方法。

主要功能包括路径操作、文件列表、创建、删除和存在性检查。目录操作可以是同步的或异步的。

创建目录

此示例演示了如何创建新目录。

main.dart
import 'dart:io';

void main() async {
  var dir = Directory('new_directory');
  
  try {
    await dir.create();
    print('Directory created: ${dir.path}');
  } catch (e) {
    print('Error creating directory: $e');
  }
}

我们创建一个 Directory 对象并调用 create() 来创建目录。async/await 模式用于异步文件操作。

$ dart main.dart
Directory created: new_directory

列出目录内容

此示例展示了如何列出目录中的文件和子目录。

main.dart
import 'dart:io';

void main() async {
  var dir = Directory('.'); // Current directory
  
  try {
    var contents = await dir.list().toList();
    
    print('Contents of ${dir.path}:');
    for (var entity in contents) {
      print(entity.path);
    }
  } catch (e) {
    print('Error listing directory: $e');
  }
}

list() 方法返回一个目录条目的流。我们将其转换为列表并打印每个条目的路径。这显示了所有文件和子目录。

$ dart main.dart
Contents of .:
./main.dart
./new_directory
./pubspec.yaml

检查目录是否存在

此示例演示了如何检查目录是否存在。

main.dart
import 'dart:io';

void main() async {
  var dir = Directory('test_dir');
  
  if (await dir.exists()) {
    print('Directory exists');
  } else {
    print('Directory does not exist');
    await dir.create();
    print('Created directory');
  }
}

exists() 方法检查目录是否存在。如果不存在,我们创建它。此模式对于在执行操作之前确保目录存在很有用。

$ dart main.dart
Directory does not exist
Created directory

删除目录

此示例展示了如何删除目录及其内容。

main.dart
import 'dart:io';

void main() async {
  var dir = Directory('temp_dir');
  
  // Create some test content
  await dir.create();
  await File('${dir.path}/test.txt').create();
  
  try {
    await dir.delete(recursive: true);
    print('Directory deleted successfully');
  } catch (e) {
    print('Error deleting directory: $e');
  }
}

delete() 方法删除目录。recursive 参数允许删除非空目录。如果没有它,如果目录不为空,则删除会失败。

$ dart main.dart
Directory deleted successfully

获取目录属性

此示例演示了如何访问目录属性和元数据。

main.dart
import 'dart:io';

void main() async {
  var dir = Directory('.'); // Current directory
  
  try {
    var stat = await dir.stat();
    
    print('Directory: ${dir.path}');
    print('Type: ${stat.type}');
    print('Size: ${stat.size} bytes');
    print('Modified: ${stat.modified}');
    print('Accessed: ${stat.accessed}');
  } catch (e) {
    print('Error getting directory stats: $e');
  }
}

stat() 方法返回一个 FileStat 对象,其中包含目录元数据。这包括大小、修改时间和文件类型信息。

$ dart main.dart
Directory: .
Type: directory
Size: 4096 bytes
Modified: 2025-04-04 14:30:22.000
Accessed: 2025-04-04 14:35:10.000

最佳实践

来源

Dart 目录文档

本教程介绍了 Dart 的 Directory 类,并通过实际示例展示了常见的目录操作,如创建、列出和删除。

作者

我叫 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。至今,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有超过十年的经验。

列出 所有 Dart 教程