ZetCode

Dart FileSystemEntityType

最后修改于 2025 年 4 月 4 日

Dart 中的 FileSystemEntityType 类表示文件系统的实体类型。它用于识别路径是指文件、目录还是链接。

这个类似枚举的类是 Dart dart:io 库的一部分。它通常与文件系统操作一起使用,在执行特定操作之前确定实体类型。

基本定义

FileSystemEntityType 是一个抽象类,具有表示不同文件系统实体类型的常量值。它不能被实例化。

该类提供四种可能的值:FILE、DIRECTORY、LINK 和 NOT_FOUND。这些有助于识别路径在文件系统中指向哪种类型的实体。

检查文件类型

此示例显示了如何检查路径是否指向常规文件。

main.dart
import 'dart:io';

void main() async {
  var file = File('example.txt');
  await file.writeAsString('Hello, Dart!');
  
  var type = await FileSystemEntity.type('example.txt');
  print(type == FileSystemEntityType.file); // true
  
  await file.delete();
}

我们创建一个文件,使用 FileSystemEntity.type() 检查其类型,然后删除它。该方法返回一个我们可以与常量进行比较的 FileSystemEntityType 值。

$ dart main.dart
true

检查目录类型

此示例演示了如何检查路径是否指向目录。

main.dart
import 'dart:io';

void main() async {
  var dir = Directory('test_dir');
  await dir.create();
  
  var type = await FileSystemEntity.type('test_dir');
  print(type == FileSystemEntityType.directory); // true
  
  await dir.delete();
}

我们创建一个目录,使用 FileSystemEntityType.directory 验证其类型,然后进行清理。这在执行目录特定操作之前很有用。

$ dart main.dart
true

检查符号链接类型

此示例显示了如何使用 FileSystemEntityType 标识符号链接。

main.dart
import 'dart:io';

void main() async {
  var file = File('target.txt');
  await file.writeAsString('Link target');
  
  var link = Link('link.txt');
  await link.create('target.txt');
  
  var type = await FileSystemEntity.type('link.txt');
  print(type == FileSystemEntityType.link); // true
  
  await link.delete();
  await file.delete();
}

我们创建一个文件并创建一个指向它的符号链接。类型检查确认了链接的性质。在此类操作后,请务必清理临时文件。

$ dart main.dart
true

处理不存在的路径

此示例演示了 FileSystemEntityType 如何处理不存在的路径。

main.dart
import 'dart:io';

void main() async {
  var type = await FileSystemEntity.type('nonexistent.txt');
  print(type == FileSystemEntityType.notFound); // true
  
  if (type == FileSystemEntityType.notFound) {
    print('Path does not exist');
  }
}

在检查不存在的路径时,FileSystemEntityType 返回 NOT_FOUND。这有助于区分不同类型的“未找到文件”情况。

$ dart main.dart
true
Path does not exist

带类型检查的目录列表

此示例显示了如何列出带有类型信息的目录内容。

main.dart
import 'dart:io';

void main() async {
  var dir = Directory('test');
  await dir.create();
  
  await File('${dir.path}/file.txt').create();
  await Directory('${dir.path}/subdir').create();
  
  var entities = dir.list();
  await for (var entity in entities) {
    var type = await FileSystemEntity.type(entity.path);
    print('${entity.path}: ${type.toString().split('.').last}');
  }
  
  await dir.delete(recursive: true);
}

我们创建一个包含文件和子目录的目录,然后列出它们的类型。type() 方法有助于在目录遍历期间对每个实体进行分类。

$ dart main.dart
test/file.txt: file
test/subdir: directory

最佳实践

来源

Dart FileSystemEntityType 文档

本教程介绍了 Dart 的 FileSystemEntityType 类,并通过实际示例展示了如何在 Dart 应用程序中识别不同的文件系统实体。

作者

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

列出 所有 Dart 教程