Files und Folders in Dart
In einem älteren Post hatte ich mich bereits mit dem Thema, wie man ein File öffnet und den Inhalt liest beschäftigt. In diesem Post befassen wir uns eingehender mit dem Thema.
Wenn Sie ein Programm schreiben das File Operationen vornimmt, wissen Sie in der Regel, wohin und in welches File Sie die Daten schreiben.
Wenn Ihr Programm aber vom Benutzer Speicherorte entgegen nimmt, wird es wichtig, mit ihnen umzugehen. Starten wir mit folgendem Code:
import 'dart:io'; import 'package:dart4/dart4.dart' as dart4; Directory meinDir; List<FileSystemEntity> files; FileSystemEntity file; FileStat f1; void main(List<String> arguments) { meinDir = Directory('E:\\Test'); // 1 files = meinDir.listSync(recursive: true); // 2 for (file in files) { print(file.absolute); // 3 f1 = file.statSync(); // 4 print(f1.toString()); // 5 } }
Die erste Variable die definiert wird ist vom Typ Directory.
Wichtig ist hier auch die Hierarchie zu verstehen. FileSystemEntity ist die übergeordnete Klasse von File, Directory und Link.
Die zweite Variable die Sie benötigen ist vom Typ FileSystemEntity. Objekte von diesem Typ werden zurückgegeben, wenn Sie ein Verzeichnis auslesen. Da das Rückgabeobjekt eine Liste ist, definieren Sie die zweite Variable dementsprechend.
Die dritte Variable ist ebenfalls ein FileSystemEntity Objekt und wird in der for Schleife benötigt.
Die letzte Variable ist vom Typ FileStat. Diese Variable enthält im Code die detaillierten Informationen zu Ordnern und Files.
1. Im ersten Schritt erstellen Sie ein Directory Objekt, mit einem absoluten oder relativen Pfad zum Verzeichnis.
2. Anschliessend wird die .listSync(..) Methode verwendet um den Inhalt des Directorys auszulesen. Mit recursive:true geben legen Sie fest, das auch untergeordnete Files ausgelesen werden.
3. Innerhalb einer for(..){...} Schleife werden detaillierte Informationen in das Terminal gedruckt. Die Eigenschaft file.absolute enthält dabei den absoluten Pfad zum Verzeichnis oder File.
4.Der Code .statSync(..) wiederum ruft eine plattformabhängige Funktion auf, die Informationen, wie letztes Aenderungsdatum etc. zurück gibt. Diese Methode gibt ein FileStat Objekt zurück.
5. Dementsprechend wird dieses FileStat Objekt innerhalb der print(..) Funktion in eine Zeichenkette gewandelt.
Das Resultat dieses kleinen Codeblocks sieht wie folgt aus:
Nun können Sie aber auch prüfen, ob ein Pfad tatsächlich auf ein Directory verweist. Beispiel:
FileSystemEntity.isDirectory(pfad) .then((value) => print('Es ist ein Verzeichnis')); FileSystemEntity.isFile(pfad2).then((value) => print('Es ist ein File'));
Zum Abschluss können Sie den Code noch so abändern, das nur das Verzeichnis in das Terminal gedruckt wird:
if (meinDir.existsSync()) { files = meinDir.listSync(recursive: true); for (file in files) { if (file is Directory) { print(file.absolute); f1 = file.statSync(); print(f1.toString()); } } }
import 'dart:io'; import 'package:dart4/dart4.dart' as dart4; Directory meinDir; List<FileSystemEntity> files; FileSystemEntity file; FileStat f1; String pfad = 'E:\\Test'; String pfad2 = 'E:\\Test\DartTest\zwecktest.txt'; void main(List<String> arguments) { meinDir = Directory(pfad); FileSystemEntity.isDirectory(pfad) .then((value) => print('Es ist ein Verzeichnis')); FileSystemEntity.isFile(pfad2).then((value) => print('Es ist ein File')); if (meinDir.existsSync()) { files = meinDir.listSync(recursive: true); for (file in files) { if (file is Directory) { print(file.absolute); f1 = file.statSync(); print(f1.toString()); } } } }
Kommentare
Kommentar veröffentlichen