Du liest und schreibst Dateien mit dem Modul fs/promises und baust dank des Moduls path zuverlässige Pfade.
Diese Lektion in Kodokon öffnenIm 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.
import { writeFile } from "node:fs/promises";
await writeFile("notes.txt", "First note\n");
console.log("File created!");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.
import { readFile } from "node:fs/promises";
const text = await readFile("notes.txt", "utf8");
console.log(text);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.
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);