Node.js fs-Modul

Java FileIntegrierte Module in Node.js


Das fs-Modul (File System) ist ein integriertes Kernmodul in Node.js, das für die Interaktion mit dem Dateisystem verwendet wird.

Das fs-Modul bietet eine Reihe von Methoden zur Handhabung von Dateioperationen wie Lesen, Schreiben und Löschen.

Das fs-Modul ist eines der am häufigsten verwendeten Module in der Node.js-Entwicklung, insbesondere in Szenarien, in denen lokale Dateien verarbeitet werden müssen.


Wie verwendet man das fs-Modul?

Um das fs-Modul zu verwenden, muss man es zuerst importieren:

const fs = require('fs');

Ab Node.js 14 kann man auch die ES6-Import-Syntax verwenden:

Beispiel

const fs = require('fs');          // CommonJS-Methode
// oder
import fs from 'fs';              // ES-Modul-Methode

Hauptmethoden des fs-Moduls

1. Datei lesen

Datei synchron lesen (readFileSync)

Beispiel

const data = fs.readFileSync('example.txt', 'utf8');
console.log(data);
  • 'example.txt': der Pfad der zu lesenden Datei
  • 'utf8': das Kodierungsformat angeben (optional)
  • Synchrone Methoden blockieren die Codeausführung, bis das Lesen der Datei abgeschlossen ist

Datei asynchron lesen (readFile)

Beispiel

fs.readFile('example.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log(data);
});
  • Asynchrone Methoden blockieren die Codeausführung nicht
  • Ergebnisse über Callback-Funktionen verarbeiten
  • Error-First-Callback ist ein gängiges Muster in Node.js

2. Dateischreiben

Datei synchron schreiben (writeFileSync)

Beispiel

fs.writeFileSync('output.txt', 'Hello, Node.js!');

Datei asynchron schreiben (writeFile)

Beispiel

fs.writeFile('output.txt', 'Hallo, Node.js!', (err) => {
  if (err) throw err;
  console.log('Datei gespeichert');
});

3. Anhängen an Dateien

Synchron anhängen (appendFileSync)

Beispiel

fs.appendFileSync('log.txt', 'Neuer Protokollinhalt\n');

Asynchron anhängen (appendFile)

Beispiel

fs.appendFile('log.txt', 'Neuer Protokollinhalt\n', (err) => {
  if (err) throw err;
});

4. Dateistatusprüfung (stat)

Beispiel

fs.stat('example.txt', (err, stats) => {
  if (err) throw err;
  console.log(`Dateigröße: ${stats.size} bytes`);
  console.log(`Erstellungszeit: ${stats.birthtime}`);
  console.log(`Ob es eine Datei ist: ${stats.isFile()}`);
  console.log(`Ob es ein Verzeichnis ist: ${stats.isDirectory()}`);
});

5. Dateilöschung

Synchron löschen (unlinkSync)

Beispiel

fs.unlinkSync('fileToDelete.txt');

Asynchron löschen (unlink)

Beispiel

fs.unlink('fileToDelete.txt', (err) => {
  if (err) throw err;
  console.log('File deleted');
});

Promise- und async/await-Unterstützung

Node.js 10+ bietet das Modul fs/promises, das Promise-basierte APIs unterstützt:

Beispiel

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

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

readFile();

Stream-basierte Dateioperationen

Bei großen Dateien kann die Verwendung von Streams die Leistung verbessern:

Lesestream

Beispiel

const readStream = fs.createReadStream('largeFile.txt', 'utf8');

readStream.on('data', (chunk) => {
  console.log('Daten empfangen:', chunk.length);
});

readStream.on('end', () => {
  console.log('Lesen abgeschlossen');
});

readStream.on('error', (err) => {
  console.error('Lesefehler:', err);
});

Schreibstream

Beispiel

const writeStream = fs.createWriteStream('output.txt');

writeStream.write('Erste Zeile der Daten\n');
writeStream.write('Zweite Zeile der Daten\n');
writeStream.end('Letzte Zeile der Daten');

writeStream.on('finish', () => {
  console.log('Schreiben abgeschlossen');
});

writeStream.on('error', (err) => {
  console.error('Schreibfehler:', err);
});

Verzeichnisoperationen

Verzeichnis erstellen

Beispiel

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

Verzeichnisinhalte lesen

Beispiel

fs.readdir('./', (err, files) => {
  if (err) throw err;
  console.log('Aktuelle Verzeichnisinhalte:', files);
});

Verzeichnis löschen

Beispiel

fs.rmdir('emptyFolder', (err) => {
  if (err) throw err;
  console.log('Verzeichnis gelöscht');
});

Best Practices

  1. Bevorzugen Sie asynchrone Methoden: Vermeiden Sie das Blockieren der Ereignisschleife
  2. Fehlerbehandlung: mögliche Fehler immer behandeln
  3. Streams zum Verarbeiten großer Dateien verwenden: Leistung verbessern
  4. Pfadbehandlung: das path-Modul verwenden, um plattformübergreifende Pfadprobleme zu behandeln
  5. Berechtigungsprüfung: Datei-/Verzeichnisberechtigungen vor Operationen prüfen

Praktische Anwendungsbeispiele

Dateikopierfunktion

Beispiel

const fs = require('fs');

function copyFile(source, target, cb) {
  const readStream = fs.createReadStream(source);
  const writeStream = fs.createWriteStream(target);

  readStream.on('error', cb);
  writeStream.on('error', cb);
 
  readStream.on('close', () => {
    writeStream.end();
    cb(null);
  });
 
  readStream.pipe(writeStream);
}

copyFile('source.txt', 'target.txt', (err) => {
  if (err) return console.error('Kopieren fehlgeschlagen:', err);
  console.log('Datei erfolgreich kopiert');
});

Java FileIntegrierte Module in Node.js

Andere Erweiterungen