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 教程。