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

CSS-Lösung für mehrspaltiges Layout

1. Feste Breite + adaptiv Erwarteter Effekt: fest...

So fügen Sie Nginx dynamisch Module hinzu

Vorne geschrieben Nachdem wir Nginx basierend auf...

Detaillierte Erklärung zur Verwendung von Vue-Mixin

Inhaltsverzeichnis Verwendung von Vue-Mixin Daten...

Analyse der Benutzererfahrung beim Design von Facebook-Dating-Websites

<br />Verwandter Artikel: Analyse der Inform...

Fünf praktische Tipps zur Gestaltung von Webformularen

1. Mobile Auswahl der Formulartexteingabe: Wenn i...

Professionelles und nicht-professionelles Webdesign

Zunächst einmal hängt die Gestaltung des Webseiten...

So fügen Sie eine Schnittstellen-Abhörmaske in ein Vue-Projekt ein

1. Geschäftshintergrund Die Verwendung einer Mask...

Detaillierte Erklärung des CSS-Pseudoelements::marker

Dieser Artikel stellt ein interessantes Pseudoele...

Analyse der Vorteile von path.join() in Node.js

Sie fragen sich möglicherweise, warum Sie die Met...

Zusammenfassung der mathematischen Symbole in Unicode

In der Mathematik, Physik und einigen wissenschaf...

So umgehen Sie unbekannte Feldnamen in MySQL

Vorwort Dieser Artikel stellt die fünfte Frage vo...

JavaScript zum Implementieren einer zufälligen Namensaufruf-Webseite

JavaScript schreibt eine zufällige Roll-Call-Webs...

Wie setze ich eine Unterstreichung in HTML? So unterstreiche ich Text in HTML

Früher bestand das Unterstreichen in HTML darin, ...

Erfahren Sie mehr über MySQL-Indizes

1. Indexierungsprinzip Indizes werden verwendet, ...