Ce face Directory.list
list() returnează un Stream<FileSystemEntity>: câte un element pentru fiecare fișier (File), director (Directory) sau link (Link) din director. Îl parcurgi cu await for sau îl strângi într-o listă cu .toList(). listSync() returnează direct o List.
Cu recursive: true se listează și conținutul tuturor subdirectoarelor. Cu is File / is Directory afli tipul fiecărui element.
Ordinea nu este garantată: depinde de sistemul de operare. Sortează după path dacă ai nevoie de o ordine anume.
Parametri
| Parametru | Descriere |
|---|---|
recursive |
true listează și subdirectoarele, în adâncime. |
followLinks |
Dacă linkurile simbolice sunt urmate (implicit true). |
Ce returnează
Elementele directorului: Stream (asincron) sau List (Sync).
Exemple
Exemplul 1: Conținutul unui director, sortat
import 'dart:io';
Future<void> main() async {
final d = Directory('proiect');
await Directory('proiect/imagini').create(recursive: true);
for (final nume in ['README.md', 'main.dart', 'imagini/logo.png']) {
await File('proiect/$nume').writeAsString('...');
}
final elemente = await d.list().toList();
elemente.sort((a, b) => a.path.compareTo(b.path));
for (final e in elemente) {
print('${e is Directory ? '[dir] ' : ' '}${e.path}');
}
}
Rezultat
proiect/README.md
[dir] proiect/imagini
proiect/main.dart
Exemplul 2: Toate fișierele .txt, recursiv
import 'dart:io';
void main() {
for (final cale in ['teme/mate/t1.txt', 'teme/mate/t2.pdf', 'teme/romana/eseu.txt', 'teme/note.txt']) {
File(cale).createSync(recursive: true);
}
final txt = Directory('teme')
.listSync(recursive: true)
.whereType<File>()
.where((f) => f.path.endsWith('.txt'))
.map((f) => f.path)
.toList()
..sort();
print(txt.join('\n'));
print('${txt.length} fișiere .txt');
}
Rezultat
teme/mate/t1.txt
teme/note.txt
teme/romana/eseu.txt
3 fișiere .txt
Exemplul 3: Mărimea totală a unui director
import 'dart:io';
Future<void> main() async {
await Directory('muzica').create();
await File('muzica/a.mp3').writeAsBytes(List.filled(1500, 0));
await File('muzica/b.mp3').writeAsBytes(List.filled(2500, 0));
var total = 0;
await for (final e in Directory('muzica').list()) {
if (e is File) total += await e.length();
}
print('Total: $total octeți');
}
Rezultat
Total: 4000 octeți
Greșeli frecvente
- Te bazezi pe ordinea din
list(). Pe alt sistem sau după alte operații, ordinea poate fi alta; sortează. - Folosești
listSync(recursive: true)pe un director imens (de exemplu rădăcina discului): programul se blochează mult timp.
Comenzi înrudite
Directory: Clasa Directory reprezintă un director (folder) de pe disc: îl creezi, îl listezi, verifici dacă există, îl ștergi.FileSystemEntity: Clasa de bază comună pentru File, Directory și Link; are path, uri, parent, exists, delete, rename, stat.FileSystemEntity.isFile: Metode statice care spun ce se află la o cale: fișier, director, link sau nimic.