Dart FileStat tutorial shows how to access file system statistics in Dart using the FileStat class.
last modified April 4, 2025
The FileStat class in Dart provides file system statistics for files and directories. It’s part of the dart:io library and offers metadata about file system entities.
FileStat includes information like file size, modification time, and type. It’s useful for file management, synchronization, and monitoring operations.
FileStat is an immutable class representing file system statistics. It’s obtained through the FileSystemEntity.stat() method.
Key properties include type, size, and modification time. The class helps determine file existence, permissions, and other attributes without opening.
This example shows how to get basic file statistics using 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}’); }
We create a file, write some content, then retrieve its statistics. The stat method returns a Future<FileStat> with the file’s metadata.
$ dart main.dart File type: FileSystemEntityType.file File size: 12 bytes Modified: 2025-04-04 10:30:45.000
This example demonstrates using FileStat to check if a file exists.
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’); } }
We attempt to get statistics for a non-existent file. The stat() method throws an exception if the file doesn’t exist or isn’t accessible.
$ dart main.dart File does not exist
This example shows how to compare modification times of two files.
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’); } }
We create two files with a delay between them, then compare their modification times. This is useful for synchronization scenarios.
$ dart main.dart file1 was modified before file2
This example demonstrates getting statistics for a directory.
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 }
We create a directory and retrieve its statistics. Note that directory sizes may report as 0 on some platforms, as they don’t include contents.
$ dart main.dart Type: FileSystemEntityType.directory Modified: 2025-04-04 10:32:10.000 Size: 0
This example shows how to get statistics for a symbolic link.
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}’); }
We create a symbolic link and examine its statistics. With followLinks: false, we get the link’s own stats. With followLinks: true, we get the target’s stats.
$ dart main.dart Link type: FileSystemEntityType.link Link size: 10 Target size: 20
Caching: Cache FileStat objects for frequently accessed files
Error handling: Always handle potential IO exceptions
Performance: Avoid unnecessary stat calls in performance-critical code
Cross-platform: Be aware of platform differences in reported values
This tutorial covered Dart’s FileStat class with practical examples showing file metadata access, existence checks, and special cases like directories.
My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.
List all Dart tutorials.