Im Knoten bezieht sich das FS-Modul auf das „Dateisystemmodul“, ein Modul zum Betreiben von Dateien. Die meisten APIs des fs-Moduls bieten drei Betriebsmethoden: 1. Synchrone Dateioperation: Der Code wird blockiert und nicht weiter ausgeführt. 2. Asynchrone Rückruffunktionsoperationsdatei: Der Code wird nicht blockiert und es muss eine Rückruffunktion vorhanden sein übergeben. Wenn das Ergebnis generiert wird, wird die Rückruffunktion ausgeführt. 3. Asynchrone Promise-Operationsdatei: Der Code wird nicht blockiert und ein Promise wird durch Aufrufen der Methodenoperation über fs.promises zurückgegeben.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, NodeJS Version 16, DELL G3-Computer.
Das Dateisystemmodul (kurz fs) ermöglicht uns den Zugriff auf das Dateisystem auf unserem Computer und die Interaktion mit diesem.
Das fs-Modul ist ein offiziell von Node.js bereitgestelltes Modul zum Betreiben von Dateien. Es bietet eine Reihe von Methoden und Eigenschaften, um die Dateioperationsanforderungen der Benutzer zu erfüllen.
Methode fs.readFile(), mit der der Inhalt der angegebenen Datei gelesen wird
fs.writeFile()-Methode, die zum Schreiben von Inhalten in die angegebene Datei verwendet wird, wenn Sie diese im JavaScript-Code verwenden möchten
Das Dateisystemmodul ist ein Kernmodul von Node.js. Das bedeutet, dass wir es nicht installieren müssen. Das Einzige, was wir tun müssen, ist das fs-Modul in eine eigene Datei zu importieren.
Fügen Sie also oben in der Datei Folgendes hinzu:
const fs = require('fs')Jetzt können wir jede Methode aus dem Dateisystemmodul mit dem Präfix fs aufrufen.
Alternativ können wir die erforderlichen Methoden einfach wie folgt aus der fs-API importieren:
const { writeFile, readFile } = require('fs')Hinweis: Der Einfachheit halber müssen wir auch das Pfadmodul importieren. Es ist ein weiteres Kernmodul von Node.js, das es uns ermöglicht, mit Datei- und Verzeichnispfaden zu arbeiten.
Fügen Sie nach dem Import des fs-Moduls Folgendes hinzu:
const path = require('path')Bei Verwendung des Dateisystemmoduls ist das Pfadmodul nicht erforderlich. Aber es hilft uns sehr!
Dateioperationen des fs-Moduls unterstützen im Allgemeinen zwei APIs: synchron und asynchron. Dazu gehören auch Rückruffunktionen und Promsie-Formulare. Auf die Synchronisierung folgt normalerweise das Wort Sync.
Die meisten APIs des fs-Moduls bieten drei Betriebsmethoden:
Synchroner Betrieb von Dateien: Der Code wird blockiert und nicht weiter ausgeführt
Betriebsdatei für asynchrone Rückruffunktion: Der Code wird nicht blockiert, die Rückruffunktion muss übergeben werden, und wenn das Ergebnis erhalten wird, wird die Rückruffunktion ausgeführt
Asynchrone Promise-Operationsdateien: Der Code wird nicht blockiert. Der Aufruf von Methodenoperationen über fs.promises gibt ein Promise zurück, das dann verarbeitet und abgefangen werden kann.
Beachten Sie, dass alle fs-Methoden standardmäßig asynchron sind. Wir können jedoch die synchronisierte Version verwenden, indem wir Sync am Ende der Methode hinzufügen.
Die synchrone Version der writeFile-Methode ist beispielsweise writeFileSync. Synchrone Methoden vervollständigen den Code synchron, sodass sie den Hauptthread blockieren. Das Blockieren des Hauptthreads in Node.js gilt als schlechte Praxis und sollte nicht getan werden.
Daher verwenden wir im Folgenden die asynchronen Methoden im Dateisystemmodul.
Um aus einer Node.js-Anwendung in eine Datei zu schreiben, verwenden Sie die Methode writeFile.
Die writeFile-Methode akzeptiert mindestens die folgenden Parameter:
Rückruf des DateinameninhaltsWenn die angegebene Datei bereits vorhanden ist, ersetzt sie den alten Inhalt durch den Inhalt, den Sie als Argument angeben. Wenn die angegebene Datei nicht existiert, wird eine neue Datei erstellt.
Schreiben Sie nach dem Import der fs- und path-Module den folgenden Code in die Datei:
fs.writeFile('content.txt', 'Alle Arbeit und kein Spiel machen Jack zu einem langweiligen Jungen!', err => { if (err) throw err process.stdout.write('Erfolgreich erstellt!')})Der obige Code erstellt eine neue Datei mit dem Namen „content.txt“ und fügt den Text „Alle Arbeit und kein Spiel macht Jack zu einem langweiligen Jungen!“ als Inhalt hinzu. Wenn Fehler vorliegen, gibt die Rückruffunktion diesen Fehler aus. Andernfalls wird auf der Konsole ausgegeben, dass die Datei erfolgreich erstellt wurde.
Es gibt andere Variationen von writeFile, wie zum Beispiel:
fs.writeFileSync – Dateien synchron schreiben fsPromises.writeFile – Dateien mit der Promise-basierten API schreibenSchauen Sie sich dieses Wesentliche an: https://gist.github.com/catalinpit/571ba06c06214b5c8744036c6500af92
Vor dem Lesen einer Datei muss der Pfad zur Datei erstellt und gespeichert werden. Der Pfad des Pfadmoduls ist hier praktisch.
Mit der Pfadmethode aus dem Join-Modul können Sie einen Dateipfad wie folgt erstellen:
const filePath = path.join(process.cwd(), 'content.txt')Der erste Parameter process.cwd() gibt das aktuelle Arbeitsverzeichnis zurück. Nachdem Sie nun den Dateipfad kennen, können Sie den Inhalt der Datei lesen.
Schreiben Sie den folgenden Code in die Datei:
fs.readFile(filePath, (error, content) => { if (error) throw error process.stdout.write(content)})Die readFile-Methode akzeptiert mindestens zwei Parameter:
Rückruf zum DateipfadWenn ein Fehler vorliegt, wird ein Fehler ausgegeben. Andernfalls wird der Dateiinhalt im Terminal gedruckt.
Es gibt andere Variationen von readFile, wie zum Beispiel:
fs.readFileSync – Synchrones Schreiben in eine Datei. fsPromises.readFile – Schreiben in eine Datei mithilfe einer Promise-basierten APISchauen Sie sich dieses Wesentliche an: https://gist.github.com/catalinpit/badc2a539a44412892a0e05a9575d54d
Das Anzeigen einer Datei in einem Verzeichnis ähnelt dem Lesen des Dateiinhalts. Anstatt jedoch den Dateipfad zu übergeben, übergeben Sie das aktuelle Arbeitsverzeichnis (wir können jedes andere Verzeichnis übergeben).
Übergeben Sie dann eine Rückruffunktion, um die Antwort zu verarbeiten. Schreiben Sie den folgenden Code in die Datei:
fs.readdir(process.cwd(), (error, files) => { if (error) throw error console.log(files)})Bisher haben wir „process.stdout.write“ nur zur Ausgabe von Inhalten an das Terminal verwendet. Sie können jedoch einfach console.log verwenden, wie im Codeausschnitt oben.
Wenn wir die Anwendung ausführen, sollten wir ein Array erhalten, das alle Dateien im Verzeichnis enthält.
Schauen Sie sich dieses Wesentliche an: https://gist.github.com/catalinpit/f82c4e6ae3acd5d97efdecb0bc67979e
Das Dateisystemmodul verfügt über eine Methode, mit der Sie Dateien löschen können. Es ist jedoch wichtig zu beachten, dass dies nur für Dateien und nicht für Verzeichnisse funktioniert.
Wenn die Unlink-Methode mit einem Dateipfad als Parameter aufgerufen wird, löscht sie die Datei. Fügen Sie der Datei den folgenden Codeausschnitt hinzu:
fs.unlink(filePath, error => { if (error) throw error console.log('Datei wurde gelöscht!')})Wenn Sie den Code erneut ausführen, werden Ihre Dateien gelöscht!
Schauen Sie sich dieses Wesentliche an: https://gist.github.com/catalinpit/b1201434218c400f77e042109bfce99e
Mit der mkdir-Methode können wir asynchron ein Verzeichnis erstellen. Schreiben Sie den folgenden Code in die Datei:
fs.mkdir(`${process.cwd()}/myFolder/secondFolder`, { recursive: true }, (err) => { if (err) throw err console.log('Ordner erfolgreich erstellt!') })Erstellen Sie zunächst einen neuen Ordner im aktuellen Arbeitsverzeichnis. Wie bereits erwähnt, können Sie das aktuelle Arbeitsverzeichnis mithilfe der cwd()-Methode aus dem Prozessobjekt abrufen.
Übergeben Sie dann den oder die Ordner, die erstellt werden sollen. Dies bedeutet jedoch nicht, dass Sie einen neuen Ordner in Ihrem aktuellen Arbeitsverzeichnis erstellen müssen. Sie können sie überall erstellen.
Der zweite Parameter ist nun die rekursive Option. Wenn es nicht auf „true“ gesetzt ist, können nicht mehrere Ordner erstellt werden. Wenn die rekursive Option auf „false“ gesetzt ist, gibt der obige Code einen Fehler aus. Probieren Sie es aus!
Wenn Sie jedoch nur einen Ordner erstellen möchten, ist es nicht erforderlich, die rekursive Option auf true zu setzen.
Der folgende Code funktioniert einwandfrei!
fs.mkdir(`${process.cwd()}/myFolder`, err => { if (err) throw err console.log('Ordner erfolgreich erstellt!')});Daher möchte ich die Verwendung von Rekursivität hervorheben. Sie müssen dies auf true setzen, wenn Sie Ordner innerhalb von Ordnern erstellen möchten. Es werden alle Ordner erstellt, auch wenn sie nicht vorhanden sind.
Wenn Sie hingegen nur einen Ordner erstellen möchten, können Sie den Wert auf „false“ belassen.
Schauen Sie sich dieses Wesentliche an: https://gist.github.com/catalinpit/09bad802541102c0cce2a2e4c3985066
Die Logik zum Löschen eines Verzeichnisses ähnelt der zum Erstellen eines Verzeichnisses. Wenn Sie sich den zum Erstellen des Verzeichnisses geschriebenen Code und den folgenden Code ansehen, werden Sie Ähnlichkeiten feststellen.
Schreiben Sie also den folgenden Code in die Datei:
fs.rmdir(`${process.cwd()}/myFolder/`, { recursive: true }, err => { if (err) throw err console.log('Ordner erfolgreich gelöscht!')})Verwenden Sie die rmdir-Methode aus dem Dateisystemmodul und übergeben Sie die folgenden Parameter:
Rückruf der rekursiven Eigenschaft des zu löschenden VerzeichnissesWenn die rekursive Eigenschaft auf „true“ gesetzt ist, werden der Ordner und sein Inhalt gelöscht. Es ist wichtig zu beachten, dass Sie dies auf „true“ setzen müssen, wenn der Ordner Inhalte enthält. Andernfalls erhalten Sie eine Fehlermeldung.
Der folgende Codeausschnitt funktioniert nur, wenn der Ordner leer ist:
fs.rmdir(`${process.cwd()}/myFolder/`, err => { if (err) throw err console.log('Ordner erfolgreich gelöscht!')})Wenn in myFolder andere Dateien und/oder Ordner vorhanden sind, tritt ein Fehler auf, wenn { recursive: true } nicht übergeben wird.
Um Probleme zu vermeiden, ist es wichtig zu wissen, wann Sie die rekursive Option verwenden sollten und wann nicht.
Schauen Sie sich dieses Wesentliche an: https://gist.github.com/catalinpit/a8cb6aca75cef8d6ac5043eae9ba22ce
Mit dem fs-Modul können Sie Verzeichnisse und Dateien umbenennen. Das folgende Code-Snippet zeigt, wie das mit der Rename-Methode geht.
// Ein Verzeichnis umbenennen fs.rename(`${process.cwd()}/myFolder/secondFolder`, `${process.cwd()}/myFolder/newFolder`, err => { if (err) throw err console .log('Directory rename!')});//Eine Datei umbenennen fs.rename(`${process.cwd()}/content.txt`, `${process.cwd()}/newFile .txt` , err => { if (err) throw err console.log('Datei umbenannt!')});Die Umbenennungsmethode enthält drei Parameter:
Der erste Parameter ist der vorhandene Ordner/die vorhandene Datei und der zweite Parameter ist der neue NamensrückrufUm also eine Datei oder ein Verzeichnis umzubenennen, müssen wir den Namen der aktuellen Datei/des aktuellen Verzeichnisses und den neuen Namen übergeben. Nach dem Ausführen der Anwendung sollten die Namen der Verzeichnisse/Dateien aktualisiert werden.
Beachten Sie, dass der neue Pfad überschrieben wird, wenn er bereits vorhanden ist (z. B. ein neuer Name für eine Datei/einen Ordner). Stellen Sie daher sicher, dass Sie nicht versehentlich vorhandene Dateien/Ordner überschreiben.
Schauen Sie sich dieses Wesentliche an: https://gist.github.com/catalinpit/5c3e7c6ae39d09996ff67175a719122e
Mit der appendFile-Methode können wir auch neuen Inhalt zu einer vorhandenen Datei hinzufügen.
Wenn wir die beiden Methoden writeFile und appendFile vergleichen, können wir sehen, dass sie ähnlich sind. Übergeben Sie den Dateipfad, den Inhalt und den Rückruf.
fs.appendFile(filePath, 'nAlle Arbeit und kein Spiel macht Jack zu einem langweiligen Jungen!', err => { if (err) throw err console.log('Alle Arbeit und kein Spiel macht Jack zu einem langweiligen Jungen!')} )Das obige Code-Snippet zeigt, wie man einer vorhandenen Datei neuen Inhalt hinzufügt. Wenn Sie die Anwendung ausführen und die Datei öffnen, sollten Sie den neuen Inhalt darin sehen.