ZetCode

Dart FileSystemEntity

最后修改于 2025 年 4 月 4 日

Dart 中的 FileSystemEntity 类为处理文件、目录和链接提供了通用接口。它是 File、Directory 和 Link 类的超类。

FileSystemEntity 提供了常见的、用于文件系统操作的方法,例如检查存在性、获取元数据和删除实体。它是 Dart 的 dart:io 库的一部分,用于服务器端应用程序。

基本定义

FileSystemEntity 是一个表示文件系统项的抽象类。它提供了适用于所有实体类型的静态方法和属性。

主要功能包括路径操作、存在性检查和类型检测。它作为更具体文件系统操作的基础。

检查文件是否存在

本示例演示如何使用 FileSystemEntity 检查文件是否存在。

main.dart
import 'dart:io';

void main() async {
  var path = 'test.txt';
  
  // Check if file exists
  var exists = await FileSystemEntity.isFile(path);
  print('File exists: $exists');
  
  // Create the file if it doesn't exist
  if (!exists) {
    await File(path).writeAsString('Hello, Dart!');
    print('File created');
  }
}

我们使用 isFile() 来检查文件是否存在。该方法返回一个 Future,该 Future 在完成时返回检查结果。然后,如果需要,我们会创建文件。

$ dart main.dart
File exists: false
File created

获取文件类型

本示例展示了如何确定文件系统实体的类型。

main.dart
import 'dart:io';

void main() async {
  var filePath = 'test.txt';
  var dirPath = 'test_dir';
  
  // Create test entities
  await File(filePath).create();
  await Directory(dirPath).create();
  
  // Check types
  var fileType = await FileSystemEntity.type(filePath);
  var dirType = await FileSystemEntity.type(dirPath);
  
  print('File type: $fileType');
  print('Directory type: $dirType');
  
  // Clean up
  await File(filePath).delete();
  await Directory(dirPath).delete();
}

type() 方法返回一个 FileSystemEntityType 枚举值。可能的值是 FILE、DIRECTORY、LINK 或 NOT_FOUND。我们测试了文件和目录路径。

$ dart main.dart
File type: FileSystemEntityType.file
Directory type: FileSystemEntityType.directory

列出目录内容

本示例演示了如何使用 FileSystemEntity 列出目录内容。

main.dart
import 'dart:io';

void main() async {
  var dir = Directory('test_dir');
  
  // Create test directory with files
  await dir.create();
  await File('${dir.path}/file1.txt').create();
  await File('${dir.path}/file2.txt').create();
  
  // List directory contents
  var entities = await dir.list().toList();
  
  print('Directory contents:');
  for (var entity in entities) {
    var type = await FileSystemEntity.type(entity.path);
    print('${entity.path} - $type');
  }
  
  // Clean up
  await dir.delete(recursive: true);
}

我们创建一个包含文件的目录,然后列出其内容。对于每个实体,我们确定其类型。list() 方法返回一个 FileSystemEntity 对象的 Stream。

$ dart main.dart
Directory contents:
test_dir/file1.txt - FileSystemEntityType.file
test_dir/file2.txt - FileSystemEntityType.file

获取文件统计信息

本示例展示了如何使用 FileSystemEntity 获取文件统计信息。

main.dart
import 'dart:io';

void main() async {
  var file = File('test.txt');
  await file.writeAsString('Dart FileSystemEntity tutorial');
  
  // Get file statistics
  var stat = await file.stat();
  
  print('File size: ${stat.size} bytes');
  print('Modified: ${stat.modified}');
  print('Accessed: ${stat.accessed}');
  print('Type: ${stat.type}');
  
  // Clean up
  await file.delete();
}

stat() 方法返回一个包含文件元数据的 FileStat 对象。我们从统计信息中访问大小、修改时间、访问时间和文件类型。

$ dart main.dart
File size: 28 bytes
Modified: 2025-04-04 15:30:45.000
Accessed: 2025-04-04 15:30:45.000
Type: FileSystemEntityType.file

删除文件系统实体

本示例演示了如何删除不同类型的文件系统实体。

main.dart
import 'dart:io';

void main() async {
  // Create test entities
  var file = File('test.txt');
  var dir = Directory('test_dir');
  
  await file.create();
  await dir.create();
  
  // Delete entities
  await FileSystemEntity.delete(file.path);
  await FileSystemEntity.delete(dir.path);
  
  // Verify deletion
  var fileExists = await file.exists();
  var dirExists = await dir.exists();
  
  print('File exists: $fileExists');
  print('Directory exists: $dirExists');
}

我们使用静态 delete() 方法删除文件和目录。相同的方法适用于所有 FileSystemEntity 类型。事后通过检查存在性来验证删除。

$ dart main.dart
File exists: false
Directory exists: false

最佳实践

来源

Dart FileSystemEntity 文档

本教程介绍了 Dart 的 FileSystemEntity 类,并提供了实际示例,展示了文件操作、目录处理和文件系统元数据访问。

作者

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

列出 所有 Dart 教程