Ich habe versucht, einen Weg zu finden, um mit Node.js in eine Datei zu schreiben, aber ohne Erfolg. Wie kann ich das machen?
1646
Die Dateisystem-API enthält viele Details . Der häufigste Weg ist:
const fs = require('fs');
fs.writeFile("/tmp/test", "Hey there!", function(err) {
if(err) {
return console.log(err);
}
console.log("The file was saved!");
});
// Or
fs.writeFileSync('/tmp/test-sync', 'Hey there!');
{ [Error: EACCES, open '/home/test.txt'] errno: 3, code: 'EACCES', path: '/home/test.txt' }
ändern. Es wurde jedoch der folgende Fehler angezeigt: Wie kann ich dieses Skript so ändern, dass es außerhalb von funktioniert/tmp
?/home/...
. Im Allgemeinen ist dieses Verzeichnis 755 root: radius (oder was auch immer). Wenn der Knoten eine Datei als Jane schreiben möchte, ist das Schreiben einfacher/home/jane/test.txt
. Es/home
ist ein großer Fehler, zu etwas Zulässigerem als 755 zu wechseln ./home
Verzeichnis speichern wollte, schlug ich vor, sie zu ändern. Ich weiß, dass dies zu einem Sicherheitsproblem führen kann. Aber wenn der Benutzer dort speichern möchte, ist dies die Lösung. PS: Ich stimme dem zu, was Sie gesagt haben (:Derzeit gibt es drei Möglichkeiten, eine Datei zu schreiben:
fs.write(fd, buffer, offset, length, position, callback
)Sie müssen auf den Rückruf warten, um sicherzustellen, dass der Puffer auf die Festplatte geschrieben wird. Es ist nicht gepuffert.
fs.writeFile(filename, data, [encoding], callback)
Alle Daten müssen gleichzeitig gespeichert werden. Sie können keine sequentiellen Schreibvorgänge ausführen.
fs.createWriteStream(path, [options]
)Erstellt eine
WriteStream
, was praktisch ist, da Sie nicht auf einen Rückruf warten müssen. Aber auch hier ist es nicht gepuffert.A ist
WriteStream
, wie der Name schon sagt, ein Stream. Ein Stream ist per Definition „ein Puffer“, der Daten enthält, die sich in eine Richtung bewegen (Quelle ► Ziel). Ein beschreibbarer Stream ist jedoch nicht unbedingt „gepuffert“. Ein Stream wird beim Schreiben "gepuffert"n
, und zur Zeitn+1
sendet der Stream den Puffer an den Kernel (weil er voll ist und geleert werden muss).Mit anderen Worten: "Ein Puffer" ist das Objekt. Ob es "gepuffert" ist oder nicht, ist eine Eigenschaft dieses Objekts.
Wenn Sie sich den Code ansehen,
WriteStream
erbt er von einem beschreibbarenStream
Objekt. Wenn Sie darauf achten, werden Sie sehen, wie sie den Inhalt spülen. Sie haben kein Puffersystem.Wenn Sie eine Zeichenfolge schreiben, wird diese in einen Puffer konvertiert, dann an die native Ebene gesendet und auf die Festplatte geschrieben. Beim Schreiben von Strings füllen sie keinen Puffer. Wenn Sie dies tun:
Sie gehen:
Das sind drei Aufrufe an die E / A-Schicht. Obwohl Sie "Puffer" verwenden, werden die Daten nicht gepuffert. Ein gepufferter Stream würde ausreichen:
fs.write(new Buffer ("abc"))
Ein Aufruf der E / A-Schicht.Ab sofort unterstützt Node.js v0.12 (stabile Version angekündigt 02/06/2015) jetzt zwei Funktionen:
cork()
unduncork()
. Es scheint, dass Sie mit diesen Funktionen endlich die Schreibaufrufe puffern / leeren können.In Java gibt es beispielsweise einige Klassen, die gepufferte Streams (
BufferedOutputStream
,BufferedWriter
...) bereitstellen . Wenn Sie drei Bytes schreiben, werden diese Bytes im Puffer (Speicher) gespeichert, anstatt nur für drei Bytes einen E / A-Aufruf durchzuführen. Wenn der Puffer voll ist, wird der Inhalt geleert und auf der Festplatte gespeichert. Dies verbessert die Leistung.Ich entdecke nichts, erinnere mich nur daran, wie ein Festplattenzugriff erfolgen sollte.
quelle
cork()
unduncork()
für diejenigen von uns zu geben, die den Knoten vor der Version 0.11 ausprobieren möchten?npm
Implementierung von gepuffertem Schreiben?Sie können es natürlich etwas fortgeschrittener machen. Nicht blockieren, Kleinigkeiten schreiben, nicht die gesamte Datei auf einmal schreiben:
quelle
Synchrones Schreiben
Asynchrones Schreiben
Wo
Es lohnt sich, die offiziellen Dokumente zum Dateisystem (fs) zu lesen .
quelle
quelle
fs.write()
) gesetzt ist, funktioniert dieses Beispiel nur, wenn alles kurz genug ist, um in einem einzigen Schreibaufruf geschrieben zu werden.Ich mochte Index of ./articles/file-system .
Es hat bei mir funktioniert.
Siehe auch Wie schreibe ich Dateien in node.js? .
Inhalt von helloworld.txt:
Update:
Wie beim Schreiben von Linux-Knoten in das aktuelle Verzeichnis scheint dies bei einigen anderen nicht der Fall zu sein. Daher füge ich diesen Kommentar nur für den Fall hinzu:
Verwenden Sie diese Option
ROOT_APP_PATH = fs.realpathSync('.'); console.log(ROOT_APP_PATH);
, um zu ermitteln, wo die Datei geschrieben wird.quelle
Die Antworten sind veraltet und ein neuerer Weg, dies zu tun, ist:
Weitere Informationen finden Sie in den Dokumenten hier
quelle
(node:23759) ExperimentalWarning: The fs.promises API is experimental
v10.15.0
Ich kenne die Frage nach "Schreiben", aber im Allgemeinen kann "Anhängen" in einigen Fällen nützlich sein, da es einfach ist, in einer Schleife Text zu einer Datei hinzuzufügen (unabhängig davon, ob die Datei vorhanden ist oder nicht). Verwenden Sie ein "\ n", wenn Sie Zeilen hinzufügen möchten, z.
quelle
const
stattvar
, das heißtconst fs = require('fs');
, unerwünschte Nebenwirkungen zu vermeiden, insbesondere , wenn Sie mit einer etwas größeren Codebasis arbeiten.OK, es ist ganz einfach , wie Knoten hat eingebaute Funktionalität für diese, es heißt ,
fs
das steht für File System und im Grunde NodeJS File System - Modul ...Fordern Sie es also zuerst in Ihrer server.js- Datei wie folgt an :
fs
Es gibt nur wenige Methoden zum Schreiben in eine Datei, aber meine bevorzugte Methode ist die Verwendung. Dadurch wirdappendFile
das Material an die Datei angehängt. Wenn die Datei nicht vorhanden ist, wird eine erstellt. Der Code könnte wie folgt aussehen:quelle
Zum Beispiel: Datei lesen und in eine andere Datei schreiben:
quelle
writeFile
?Sie können mit dem Modul fs (Dateisystem) in eine Datei schreiben .
Hier ist ein Beispiel, wie Sie es tun können:
Möglicherweise möchten Sie diese Callback-Inside-Callback-Codestruktur auch mithilfe von Promises und
async
/ -Anweisungen entfernenawait
. Dadurch wird die asynchrone Codestruktur viel flacher. Dazu gibt es eine praktische util.promisify (Original) -Funktion. Es ermöglicht uns, von Rückrufen zu Versprechungen zu wechseln. Schauen Sie sich das Beispiel mit den folgendenfs
Funktionen an:quelle
Hier verwenden wir w + zum Lesen / Schreiben beider Aktionen. Wenn der Dateipfad nicht gefunden wird, wird er automatisch erstellt.
Inhalt bedeutet, was Sie in die Datei schreiben müssen, und deren Länge "content.length".
quelle
Hier ist das Beispiel, wie man eine CSV-Datei von lokal liest und eine CSV-Datei in eine lokale Datei schreibt.
quelle
Lesen Sie anschließend diesen langen Artikel. Sie sollten verstehen, wie es funktioniert. Hier ist ein Beispiel für
createWriteStream()
.quelle
createWriteStream
wurde bereits in mehreren Antwortjahren vor dieser erwähnt.Sie können die Bibliothek verwenden
easy-file-manager
zuerst von npm installieren
npm install easy-file-manager
Beispiel zum Hochladen und Entfernen von Dateien
quelle
This modules is created to save and remove files.
. Keine Antwort.Sie können anhand des folgenden Codebeispiels in eine Datei schreiben:
quelle
writeFile
war schon vor Jahren mehrfach als Antwort gegeben worden. Was fügt diese Antwort hinzu?