Dart FileStat
最后修改于 2025 年 4 月 4 日
Dart 中的 FileStat 类提供了文件和目录的文件系统统计信息。它是 dart:io 库的一部分,提供有关文件系统实体的元数据。
FileStat 包含文件大小、修改时间、类型等信息。它对文件管理、同步和监控操作很有用。
基本定义
FileStat 是一个表示文件系统统计信息的不可变类。它通过 FileSystemEntity.stat() 方法获得。
关键属性包括类型、大小和修改时间。该类有助于在不打开文件的情况下确定文件的存在、权限和其他属性。
获取基本文件统计信息
本示例演示了如何使用 FileStat 获取基本文件统计信息。
main.dart
import 'dart:io';
void main() async {
var file = File('example.txt');
await file.writeAsString('Hello, Dart!');
var stat = await file.stat();
print('File type: ${stat.type}');
print('File size: ${stat.size} bytes');
print('Modified: ${stat.modified}');
}
我们创建一个文件,写入一些内容,然后检索其统计信息。stat 方法返回一个 Future<FileStat>,其中包含文件的元数据。
$ dart main.dart File type: FileSystemEntityType.file File size: 12 bytes Modified: 2025-04-04 10:30:45.000
检查文件是否存在
本示例演示了如何使用 FileStat 检查文件是否存在。
main.dart
import 'dart:io';
void main() async {
var file = File('nonexistent.txt');
try {
var stat = await file.stat();
print('File exists: ${stat.type != FileSystemEntityType.notFound}');
} catch (e) {
print('File does not exist');
}
}
我们尝试获取一个不存在的文件的统计信息。如果文件不存在或无法访问,stat() 方法会抛出异常。
$ dart main.dart File does not exist
比较文件修改时间
本示例演示了如何比较两个文件的修改时间。
main.dart
import 'dart:io';
void main() async {
var file1 = File('file1.txt');
var file2 = File('file2.txt');
await file1.writeAsString('First file');
await Future.delayed(Duration(seconds: 1));
await file2.writeAsString('Second file');
var stat1 = await file1.stat();
var stat2 = await file2.stat();
if (stat1.modified.isBefore(stat2.modified)) {
print('file1 was modified before file2');
} else {
print('file2 was modified before file1');
}
}
我们在两个文件之间创建延迟,然后比较它们的修改时间。这对于同步场景很有用。
$ dart main.dart file1 was modified before file2
获取目录统计信息
本示例演示了如何获取目录的统计信息。
main.dart
import 'dart:io';
void main() async {
var dir = Directory('test_dir');
await dir.create();
var stat = await dir.stat();
print('Type: ${stat.type}');
print('Modified: ${stat.modified}');
print('Size: ${stat.size}'); // Directories may report 0 size
}
我们创建一个目录并检索其统计信息。请注意,在某些平台上,目录大小可能会报告为 0,因为它们不包含内容。
$ dart main.dart Type: FileSystemEntityType.directory Modified: 2025-04-04 10:32:10.000 Size: 0
符号链接统计信息
本示例演示了如何获取符号链接的统计信息。
main.dart
import 'dart:io';
void main() async {
var file = File('target.txt');
await file.writeAsString('Target file content');
var link = Link('link.txt');
await link.create(file.path);
var stat = await link.stat();
print('Link type: ${stat.type}');
print('Link size: ${stat.size}');
// To get the target's stats, use followLinks: true
var targetStat = await link.stat(followLinks: true);
print('Target size: ${targetStat.size}');
}
我们创建一个符号链接并检查其统计信息。当 followLinks: false 时,我们获取链接本身的统计信息。当 followLinks: true 时,我们获取目标文件的统计信息。
$ dart main.dart Link type: FileSystemEntityType.link Link size: 10 Target size: 20
最佳实践
- 缓存:缓存 FileStat 对象以供频繁访问的文件
- 错误处理:始终处理潜在的 IO 异常
- 性能:在性能关键的代码中避免不必要的 stat 调用
- 跨平台:注意平台上报告值的差异
来源
本教程介绍了 Dart 的 FileStat 类,并通过实际示例展示了文件元数据访问、存在性检查以及目录等特殊情况。
作者
列出 所有 Dart 教程。