So verwenden Sie das Modul-FS-Dateisystem in Nodejs

So verwenden Sie das Modul-FS-Dateisystem in Nodejs

Überblick

Die FS-Dokumentation von Node enthält viele APIs, schließlich unterstützt es Dateisystemoperationen vollständig. Die Dokumentation ist gut organisiert und die Vorgänge sind grundsätzlich in Dateivorgänge, Verzeichnisvorgänge, Dateiinformationen und Streams unterteilt. Die Programmiermethode unterstützt auch Synchronisierung, Asynchronität und Promise.

In diesem Artikel werden mehrere Probleme beschrieben, die im Dokument nicht ausführlich beschrieben werden. Dadurch können die Ideen des FS-Dokuments besser verknüpft werden:

  • Dateideskriptoren
  • Synchron, asynchron und Promise
  • Kataloge und Katalogartikel
  • Dateiinformationen
  • Strom

Dateideskriptoren

Ein Dateideskriptor ist eine nicht negative Ganzzahl. Es handelt sich dabei um einen Indexwert, mit dessen Hilfe das Betriebssystem die entsprechende Datei finden kann.

In vielen Low-Level-APIs von fs sind Dateideskriptoren erforderlich. In der Dokumentation werden Deskriptoren üblicherweise durch fd dargestellt. Beispiel: fs.read(fd, Puffer, Offset, Länge, Position, Rückruf). Die entsprechende API ist: fs.readFile(Pfad[, Optionen], Rückruf).

Da das Betriebssystem eine Begrenzung für die Anzahl der Dateideskriptoren hat, vergessen Sie nicht, die Datei nach Abschluss des Dateivorgangs zu schließen:

const fs = erfordern("fs");

fs.open("./db.json", "r", (err, fd) => {
    wenn (err) throw err;
    // Dateioperationen...
    // Nach Abschluss des Vorgangs die Datei schließen fs.close(fd, err => {
        wenn (err) throw err;
    });
});

Synchron, asynchron und Promise

Alle Dateisystem-APIs gibt es sowohl synchrone als auch asynchrone Formen.

Synchrones Schreiben

Es wird nicht empfohlen, synchrone APIs zu verwenden, da diese den Thread blockieren.

versuchen {
    const buf = fs.readFileSync("./package.json");
    console.log(buf.toString("utf8"));
} Fehler abfangen {
    console.log(Fehlermeldung);
}

Asynchrones Schreiben

Beim asynchronen Schreiben kann es leicht passieren, dass Sie in die Callback-Hölle geraten.

fs.readFile("./package.json", (err, data) => {
    wenn (err) throw err;
    Konsole.log(data.toString("utf8"));
});

(Empfohlen) Versprechen schreiben

Vor Node v12 müssen Sie die Promise-Kapselung selbst verwenden:

Funktion readFilePromise(Pfad, Kodierung = "utf8") {
    const promise = neues Versprechen((lösen, ablehnen) => {
        fs.readFile(Pfad, (Fehler, Daten) => {
            wenn (Fehler) returniere ablehnen(Fehler);
            Rückgabewert für „resolve(data.toString(encoding)“);
        });
    });
    Rückgabeversprechen;
}

: Lesen Sie das Skript und geben Sie es in das Skript ein.

In Node v12 wurde die FS Promise API eingeführt. Sie geben Promise-Objekte zurück, anstatt Rückrufe zu verwenden. Auf die API kann über require('fs').promises zugegriffen werden. Dies reduziert die Entwicklungskosten.

const fsPromises = erfordern("fs").promises;

fsVersprechen
    .readFile("./package.json", {
        Kodierung: "utf8",
        Flagge: "r"
    })
    .then(Konsole.log)
    .catch(Konsole.Fehler);

Kataloge und Katalogartikel

fs.Dir-Klasse: kapselt Operationen im Zusammenhang mit Dateiverzeichnissen

Klasse fs.Dirent: kapselt Operationen im Zusammenhang mit Verzeichniseinträgen. Bestimmen Sie beispielsweise den Gerätetyp (Zeichen, Block, FIFO usw.).

Die Beziehung zwischen ihnen wird im Code dargestellt:

const fsPromises = erfordern("fs").promises;

asynchrone Funktion main() {
    const dir = await fsPromises.opendir(".");
    lass dirent = null;
    während ((dirent = warte auf dir.read()) !== null) {
        Konsole.log(dirent.name);
    }
}

hauptsächlich();

Dateiinformationen

fs.Stats-Klasse: kapselt Operationen im Zusammenhang mit Dateiinformationen. Es wird in der Rückruffunktion fs.stat() zurückgegeben.

fs.stat("./package.json", (err, stats) => {
    wenn (err) throw err;
    konsole.log(Statistiken);
});

Hinweis zur Überprüfung, ob die Datei existiert:

  • Es wird nicht empfohlen, fs.stat() zu verwenden, um zu prüfen, ob eine Datei vorhanden ist, bevor fs.open(), fs.readFile() oder fs.writeFile() aufgerufen wird. Stattdessen sollten Sie die Datei direkt öffnen und lesen oder schreiben und alle auftretenden Fehler behandeln, wenn die Datei nicht verfügbar ist.
  • Um zu prüfen, ob eine Datei existiert, ohne sie anschließend zu bearbeiten, empfiehlt sich die Verwendung von fs.access()

ReadStream und WriteStream

In Node.JS ist Stream eine sehr wichtige Bibliothek. Die APIs vieler Bibliotheken sind streambasiert gekapselt. Beispielsweise der unten beschriebene ReadStream und WriteStream in fs.

fs selbst stellt readFile und writeFile bereit, der Preis für deren Nützlichkeit sind jedoch Leistungsprobleme, da der gesamte Inhalt auf einmal in den Speicher geladen wird. Bei großen Dateien von mehreren GByte gibt es allerdings offensichtlich Probleme.

Die Lösung für große Dateien lautet also natürlich: Stück für Stück auslesen. Dies erfordert die Verwendung von Stream. Am Beispiel von readStream lautet der Code wie folgt:

const rs = fs.createReadStream("./package.json");
lass Inhalt = "";

rs.on("öffnen", () => {
    console.log("mit dem Lesen beginnen");
});

rs.on("Daten", chunk => {
    Inhalt += chunk.toString("utf8");
});

rs.on("schließen", () => {
    console.log("Lesen beenden, Inhalt ist:\n", Inhalt);
});

Mithilfe von Stream Pipe lässt sich eine große Dateikopierfunktion schnell in einer Zeile zusammenfassen:

Funktion kopiereGroßeDatei(Quelle, Ziel) {
    fs.createReadStream(Quelle).pipe(fs.createWriteStream(Ziel));
}

Oben finden Sie Einzelheiten zur Verwendung des Moduls fs-Dateisystem in Nodejs. Weitere Informationen zu Nodejs finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • node.js-fs Dateisystemmodul ist dies, wissen Sie
  • Detailliertes Beispiel zur Verwendung des fs-Dateisystemmoduls in node.js
  • Detaillierte Erläuterung des Beispiels eines Node.js-Dateibetriebssystems
  • Detaillierte Erläuterung zur Verwendung des NodeJs-Dateisystembetriebsmoduls fs
  • Wie gut wissen Sie über das Dateisystem von Node?

<<:  C# implementiert MySQL-Befehlszeilensicherung und -wiederherstellung

>>:  Ansible - Bereitstellungsmethode für automatisierten Betrieb und Wartung für Linux-Systeme

Artikel empfehlen

So erhalten und verwenden Sie die Zeit im Linux-System

Es gibt zwei Arten von Linux-Systemzeiten. (1) Ka...

Mehrere Möglichkeiten zum Löschen von Arrays in Vue (Zusammenfassung)

Inhaltsverzeichnis 1. Einleitung 2. Mehrere Mögli...

Detaillierte Erklärung gängiger Docker Compose-Befehle

1. Die Verwendung von Docker Compose ist der Verw...

Beispiele für den Import und Export von MySQL-Tabellendaten

Dieser Artikel beschreibt die Import- und Exportv...

Zusammenfassung der Vorteile von Vue3 gegenüber Vue2

Inhaltsverzeichnis 1. Warum brauchen wir vue3? 2....

Einige Vorschläge zur Linux-Systemoptimierung (Kerneloptimierung)

Swap deaktivieren Wenn auf dem Server ein Datenba...

So kapseln Sie Axios in Vue

Inhaltsverzeichnis 1. Installation 1. Einleitung ...

Zusammenfassung der Nginx-Konfigurationsstandortmethode

Standortabgleichsreihenfolge 1. Übereinstimmung m...

Verwenden von JS zum Implementieren eines einfachen Rechners

Verwenden Sie JS, um einen einfachen Rechner für ...