Node.js - Dateisystem

Willkommen, zukünftige Programmierer! Heute tauchen wir in die aufregende Welt von Node.js und sein Dateisystemmodul ein. Als dein freundlicher Nachbarschafts-Computerlehrer bin ich hier, um dich auf dieser Reise mit vielen Beispielen und Erklärungen zu führen. Also, schnall dich an und los geht's!

Node.js - File System

Synchron vs. asynchron

Bevor wir uns den Feinheiten der Dateioperationen zuwenden, lassen wir uns über zwei wichtige Konzepte unterhalten: synchrone und asynchrone Operationen.

Stell dir vor, du bist in einem Café. In einer synchrone Welt würdest du deinen Kaffee bestellen, auf dessen Zubereitung warten und dann zur nächsten Aufgabe übergehen. In einer asynchronen Welt würdest du deinen Kaffee bestellen und dann deinen Geschäften nachgehen, während der Barista ihn zubereitet.

In Node.js haben wir sowohl synchrone als auch asynchrone Methoden für Dateioperationen. Sehen wir uns ein Beispiel an:

const fs = require('fs');

// Synchron lesen
const data = fs.readFileSync('hello.txt', 'utf8');
console.log(data);

// Asynchron lesen
fs.readFile('hello.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});

In der synchrone Version wartet unser Programm, bis die Datei gelesen wird, bevor es weitermacht. In der asynchronen Version führt es weiter aus, während die Datei gelesen wird, und führt dann eine Callback-Funktion aus, wenn es fertig ist.

Eine Datei schreiben

Nun lass uns lernen, wie man in eine Datei schreibt. Es ist, als würde man eine Nachricht für die Zukunft hinterlassen!

const fs = require('fs');

// Synchron schreiben
fs.writeFileSync('note.txt', 'Hallo, zukünftiges Ich!');

// Asynchron schreiben
fs.writeFile('note.txt', 'Hallo, zukünftiges Ich!', (err) => {
if (err) throw err;
console.log('Datei gespeichert!');
});

In beiden Fällen erstellen wir (oder überschreiben) eine Datei namens 'note.txt' mit dem Inhalt "Hallo, zukünftiges Ich!". Die asynchrone Version enthält eine Callback-Funktion, die nach dem Schreiben der Datei ausgeführt wird.

Eine Datei lesen

Das Lesen einer Datei ist, als würde man die Nachricht öffnen, die man sich selbst hinterlassen hat. Sehen wir uns an, wie man es macht:

const fs = require('fs');

// Synchron lesen
const data = fs.readFileSync('note.txt', 'utf8');
console.log(data);

// Asynchron lesen
fs.readFile('note.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});

Beide Methoden geben den Inhalt von 'note.txt' aus. Der Parameter 'utf8' gibt die Kodierung der Datei an.

Eine Datei öffnen

Manchmal möchten wir mehr Kontrolle darüber haben, wie wir mit einer Datei interagieren. Daar ist die open-Methode ins Spiel kommt:

const fs = require('fs');

// Asynchron öffnen
fs.open('myfile.txt', 'r', (err, fd) => {
if (err) throw err;
console.log('Datei erfolgreich geöffnet!');
// Vergiss nicht, die Datei zu schließen, wenn du fertig bist
fs.close(fd, (err) => {
if (err) throw err;
});
});

Dies öffnet 'myfile.txt' im Lesemodus ('r'). Der fd in der Callback-Funktion ist ein Dateideskriptor, den wir für weitere Operationen an der Datei verwenden werden.

Promises API

Für diejenigen, die lieber mit Promises arbeiten (keine Sorge, wenn du nicht weißt, was das ist!), bietet Node.js eine auf Promises basierende API für Dateioperationen:

const fs = require('fs').promises;

async function readMyFile() {
try {
const data = await fs.readFile('myfile.txt', 'utf8');
console.log(data);
} catch (error) {
console.error('Fehler beim Lesen der Datei:', error);
}
}

readMyFile();

Dies erreicht das gleiche Ergebnis wie unser früherer asynchroner readFile-Beispiel, aber mit moderner JavaScript-Syntax.

Dateiinformationen abrufen

Interessiert an den Informationen einer Datei? Node.js hat dich abgedeckt:

const fs = require('fs');

fs.stat('myfile.txt', (err, stats) => {
if (err) throw err;
console.log(`Dateigröße: ${stats.size} Bytes`);
console.log(`Ist es ein Verzeichnis? ${stats.isDirectory()}`);
console.log(`Ist es eine Datei? ${stats.isFile()}`);
});

Dies gibt uns Informationen wie die Dateigröße, ob es ein Verzeichnis oder eine Datei ist und mehr.

Eine Datei schließen

Vergiss nicht, deine Dateien zu schließen, wenn du fertig bist. Es ist wie das Zudrehen der Kappe deines Zahnpastatubens!

const fs = require('fs');

fs.open('myfile.txt', 'r', (err, fd) => {
if (err) throw err;
// Führe einige Operationen aus...
fs.close(fd, (err) => {
if (err) throw err;
console.log('Datei erfolgreich geschlossen');
});
});

Eine Datei kürzen

Manchmal möchte man eine Datei behalten, aber deren Inhalt entfernen. Daar ist die truncate-Methode ins Spiel kommt:

const fs = require('fs');

fs.truncate('myfile.txt', 0, (err) => {
if (err) throw err;
console.log('Dateiinhalt gelöscht!');
});

Dies reduziert die Datei auf 0 Bytes, effektiv den Inhalt löscht.

Eine Datei löschen

Wenn du completely mit einer Datei fertig bist, kannst du sie löschen:

const fs = require('fs');

fs.unlink('myfile.txt', (err) => {
if (err) throw err;
console.log('Datei erfolgreich gelöscht');
});

Sei vorsichtig mit dieser! Es gibt keinen Rückgängig-Button im echten Leben!

Ein Verzeichnis erstellen

Brauchst du einen neuen Ordner? So machst du einen:

const fs = require('fs');

fs.mkdir('mynewfolder', (err) => {
if (err) throw err;
console.log('Verzeichnis erfolgreich erstellt!');
});

Ein Verzeichnis lesen

Möchtest du sehen, was in einem Verzeichnis ist? Hier ist wie:

const fs = require('fs');

fs.readdir('.', (err, files) => {
if (err) throw err;
console.log('Verzeichnisinhalt:');
files.forEach(file => {
console.log(file);
});
});

Dies列表 alle Dateien und Unterverzeichnisse im aktuellen Verzeichnis.

Ein Verzeichnis entfernen

Und schließlich, wenn du ein Verzeichnis entfernen möchtest:

const fs = require('fs');

fs.rmdir('mynewfolder', (err) => {
if (err) throw err;
console.log('Verzeichnis erfolgreich entfernt');
});

Beachte, dass dies nur für leere Verzeichnisse funktioniert.

Methodenreferenz

Hier ist eine praktische Tabelle der Methoden, die wir behandelt haben:

Methode Beschreibung
readFile Liest den gesamten Inhalt einer Datei
writeFile Schreibt Daten in eine Datei, ersetzt die Datei, wenn sie bereits existiert
open Öffnet eine Datei zum Lesen oder Schreiben
close Schließt einen Dateideskriptor
stat Holt Informationen über eine Datei
truncate Kürzt eine Datei auf eine bestimmte Länge
unlink Löscht eine Datei
mkdir Erstellt ein neues Verzeichnis
readdir Liest den Inhalt eines Verzeichnisses
rmdir Entfernt ein Verzeichnis

Und das war's! Du bist jetzt mit den Grundlagen der Dateisystemoperationen in Node.js ausgestattet. Erinnere dich daran, Übung macht den Meister, also habe keine Angst, mit diesen Methoden zu experimentieren. Viel Spaß beim Programmieren!

Credits: Image by storyset