Dart FileSystemEntity
last modified April 4, 2025
The FileSystemEntity
class in Dart provides a common interface for
working with files, directories, and links. It's the superclass for File,
Directory, and Link classes.
FileSystemEntity offers methods for common filesystem operations like checking
existence, getting metadata, and deleting entities. It's part of Dart's
dart:io
library for server-side applications.
Basic Definition
FileSystemEntity
is an abstract class representing filesystem items.
It provides static methods and properties that work with all entity types.
Key features include path manipulation, existence checking, and type detection. It serves as a base for more specific file system operations.
Checking File Existence
This example demonstrates how to check if a file exists using 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'); } }
We use isFile() to check for file existence. The method returns a Future
$ dart main.dart File exists: false File created
Getting File Type
This example shows how to determine the type of a filesystem entity.
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(); }
The type() method returns a FileSystemEntityType enum value. Possible values are FILE, DIRECTORY, LINK, or NOT_FOUND. We test both file and directory paths.
$ dart main.dart File type: FileSystemEntityType.file Directory type: FileSystemEntityType.directory
Listing Directory Contents
This example demonstrates listing directory contents using 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); }
We create a directory with files, then list its contents. For each entity, we determine its type. The list() method returns a Stream of FileSystemEntity objects.
$ dart main.dart Directory contents: test_dir/file1.txt - FileSystemEntityType.file test_dir/file2.txt - FileSystemEntityType.file
Getting File Statistics
This example shows how to get file statistics using 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(); }
The stat() method returns a FileStat object containing file metadata. We access size, modification time, access time, and file type from the statistics.
$ 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
Deleting Filesystem Entities
This example demonstrates deleting different types of filesystem entities.
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'); }
We use the static delete() method to remove both files and directories. The same method works for all FileSystemEntity types. We verify deletion by checking existence afterward.
$ dart main.dart File exists: false Directory exists: false
Best Practices
- Use async/await: Most methods return Futures
- Check types: Verify entity types before operations
- Handle errors: Wrap operations in try-catch blocks
- Clean up: Delete temporary files when done
- Use absolute paths: For more reliable operations
Source
Dart FileSystemEntity Documentation
This tutorial covered Dart's FileSystemEntity class with practical examples showing file operations, directory handling, and filesystem metadata access.
Author
List all Dart tutorials.