Dart FileSystemEntity
最后修改于 2025 年 4 月 4 日
Dart 中的 FileSystemEntity 类为处理文件、目录和链接提供了通用接口。它是 File、Directory 和 Link 类的超类。
FileSystemEntity 提供了常见的、用于文件系统操作的方法,例如检查存在性、获取元数据和删除实体。它是 Dart 的 dart:io 库的一部分,用于服务器端应用程序。
基本定义
FileSystemEntity 是一个表示文件系统项的抽象类。它提供了适用于所有实体类型的静态方法和属性。
主要功能包括路径操作、存在性检查和类型检测。它作为更具体文件系统操作的基础。
检查文件是否存在
本示例演示如何使用 FileSystemEntity 检查文件是否存在。
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
$ dart main.dart File exists: false File created
获取文件类型
本示例展示了如何确定文件系统实体的类型。
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 列出目录内容。
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 获取文件统计信息。
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
删除文件系统实体
本示例演示了如何删除不同类型的文件系统实体。
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
最佳实践
- 使用 async/await:大多数方法都返回 Futures
- 检查类型:在操作前验证实体类型
- 处理错误:将操作包装在 try-catch 块中
- 清理:完成后删除临时文件
- 使用绝对路径:以获得更可靠的操作
来源
本教程介绍了 Dart 的 FileSystemEntity 类,并提供了实际示例,展示了文件操作、目录处理和文件系统元数据访问。
作者
列出 所有 Dart 教程。