Kodokon kodokon.com

Das Dateisystem: lesen und schreiben mit fs/promises

Du liest und schreibst Dateien mit dem Modul fs/promises und baust dank des Moduls path zuverlässige Pfade.

8 Min. · 3 Fragen

Diese Lektion in Kodokon öffnen

Im Browser darf JavaScript die Dateien auf deiner Festplatte nicht anfassen: eine Frage der Sicherheit. Node dagegen läuft direkt auf deinem Rechner und kann dank des Moduls fs (file system) Dateien lesen und schreiben. Wir verwenden seine moderne Variante fs/promises, bei der jede Funktion ein Promise zurückgibt - aus dem JavaScript-Pfad weißt du schon, wie du sie mit await abwartest. Beachte das Präfix node: in den Imports: Es macht deutlich, dass das Modul von Node selbst stammt und nicht aus node_modules. Und gute Nachricht: In einem ES-Modul funktioniert await direkt auf Dateiebene, ohne umschließende Funktion.

JAVASCRIPT
import { writeFile } from "node:fs/promises";

await writeFile("notes.txt", "First note\n");
console.log("File created!");
writeFile erstellt die Datei notes.txt, falls sie nicht existiert, mit dem als zweiten Parameter übergebenen Text.

Zum Lesen gilt dieselbe Logik mit readFile. Sein zweiter Parameter ist entscheidend: utf8 bezeichnet die Kodierung, also die Art, die auf der Festplatte gespeicherten Bytes in lesbaren Text zu übersetzen. Lässt du ihn weg, gibt Node ein Buffer-Objekt zurück - rohe Bytes - statt einer Zeichenkette.

JAVASCRIPT
import { readFile } from "node:fs/promises";

const text = await readFile("notes.txt", "utf8");
console.log(text);
Der Inhalt der Datei kommt als Zeichenkette an, bereit zur Weiterverarbeitung.

Reden wir über Pfade. Ein relativer Pfad (notes.txt, data/log.txt) beginnt beim aktuellen Ordner; ein absoluter Pfad (C:\... oder /home/...) beginnt an der Wurzel der Festplatte. Eine klassische Falle: Windows trennt Ordner mit \, macOS und Linux mit /. Das Modul path löst das Problem: path.join setzt die Teile mit dem richtigen Trennzeichen zusammen, egal auf welchem System. Kombinieren wir es mit mkdir, das einen Ordner erstellt.

JAVASCRIPT
import path from "node:path";
import { mkdir, writeFile } from "node:fs/promises";

const file = path.join("data", "log.txt");

await mkdir("data", { recursive: true });
await writeFile(file, "First log\n");
console.log("Written to:", file);
Die Option recursive verhindert einen Fehler, falls der Ordner data schon existiert.

Wissenscheck

Stelle sicher, dass du die wichtigsten Punkte dieser Lektion behalten hast.

  1. Was gibt readFile zurück, wenn du den zweiten Parameter utf8 weglässt?
    • Eine leere Zeichenkette
    • Einen Fehler: Die Kodierung ist Pflicht
    • Einen Buffer, also die rohen Bytes der Datei
  2. Was macht writeFile, wenn die Zieldatei schon existiert?
    • Es ersetzt den gesamten vorhandenen Inhalt durch den neuen Text
    • Es hängt den neuen Text ans Ende der Datei an
    • Es verweigert das Schreiben und wirft einen Fehler
    • Es erstellt automatisch eine Sicherungskopie
  3. Was bringt path.join beim Bauen eines Pfads?
    • Es erstellt die fehlenden Ordner des Pfads
    • Es setzt die Teile mit dem für das System richtigen Trennzeichen zusammen
    • Es prüft, ob die Datei existiert, bevor es weitergeht