Frage Dateien in Node.js schreiben


Ich habe versucht, eine Möglichkeit zu finden, in eine Datei zu schreiben, wenn Sie Node.js verwenden, aber ohne Erfolg. Wie kann ich das machen?


1139
2018-03-23 00:25


Ursprung


Antworten:


Es gibt viele Details in der Dateisystem-API. Der allgemeinste Weg (soweit ich weiß) ist:

var fs = require('fs');
fs.writeFile("/tmp/test", "Hey there!", function(err) {
    if(err) {
        return console.log(err);
    }

    console.log("The file was saved!");
}); 

1807
2018-03-23 01:50



Derzeit gibt es drei Möglichkeiten, eine Datei zu schreiben:

  1. fs.write(fd, buffer, offset, length, position, callback)

    Sie müssen auf den Rückruf warten, um sicherzustellen, dass der Puffer auf den Datenträger geschrieben wird. Es ist nicht gepuffert.

  2. fs.writeFile(filename, data, [encoding], callback)

    Alle Daten müssen gleichzeitig gespeichert werden; Sie können keine sequentiellen Schreibvorgänge ausführen.

  3. fs.createWriteStream(path, [options])

    Erstellt ein WriteStreamDies ist praktisch, da Sie nicht auf einen Rückruf warten müssen. Aber wieder ist es nicht gepuffert.

EIN WriteStream, wie der Name sagt, ist ein Strom. Ein Stream ist definitionsgemäß "ein Puffer", der Daten enthält, die sich in eine Richtung bewegen (Quelle ► Ziel). Ein beschreibbarer Stream wird jedoch nicht unbedingt "gepuffert". Ein Stream wird beim Schreiben "gepuffert" n Zeiten und zur Zeit n+1Der Stream sendet 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, wird der WriteStream erbt von einem beschreibbaren Stream Objekt. Wenn Sie aufpassen, werden Sie sehen, wie sie den Inhalt spülen. Sie haben kein Pufferungssystem.

Wenn Sie eine Zeichenfolge schreiben, wird sie in einen Puffer konvertiert und dann an die native Ebene gesendet und auf die Festplatte geschrieben. Beim Schreiben von Strings füllen sie keinen Puffer. Also, wenn du es tust:

write("a")
write("b")
write("c")

Sie gehen:

fs.write(new Buffer("a"))
fs.write(new Buffer("b"))
fs.write(new Buffer("c"))

Das ist drei ruft die I / O-Ebene auf. Obwohl Sie "Puffer" verwenden, werden die Daten nicht gepuffert. Ein gepufferter Stream würde Folgendes tun: fs.write(new Buffer ("abc")), ein Aufruf an die I / O-Schicht.

Ab sofort unterstützt Node.js v0.12 (stabile Version vom 02.06.2015) jetzt zwei Funktionen: cork() und uncork(). Es scheint, dass diese Funktionen Ihnen schließlich ermöglichen, die Schreibaufrufe zu puffern / zu leeren.

Zum Beispiel gibt es in Java einige Klassen, die gepufferte Streams bereitstellen (BufferedOutputStream, BufferedWriter...). Wenn Sie drei Bytes schreiben, werden diese Bytes im Puffer (Speicher) gespeichert, anstatt einen I / O-Aufruf nur für drei Bytes auszuführen. Wenn der Puffer voll ist, wird der Inhalt geleert und auf der Festplatte gespeichert. Dies verbessert die Leistung.

Ich entdecke nichts, denke nur daran, wie ein Festplattenzugriff erfolgen soll.


430
2017-08-05 15:28



Sie können es natürlich etwas fortgeschrittener machen. Non-Blocking, Schreiben von Bits und Stücken, nicht die ganze Datei auf einmal schreiben:

var fs = require('fs');
var stream = fs.createWriteStream("my_file.txt");
stream.once('open', function(fd) {
  stream.write("My first row\n");
  stream.write("My second row\n");
  stream.end();
});

189
2017-12-16 14:40



var path = 'public/uploads/file.txt',
buffer = new Buffer("some content\n");

fs.open(path, 'w', function(err, fd) {
    if (err) {
        throw 'error opening file: ' + err;
    }

    fs.write(fd, buffer, 0, buffer.length, null, function(err) {
        if (err) throw 'error writing file: ' + err;
        fs.close(fd, function() {
            console.log('file written');
        })
    });
});

38
2017-11-07 20:54



ich mochte Index von ./articles/file-system.

Es hat für mich funktioniert.

Siehe auch Wie schreibe ich Dateien in node.js?.

fs = require('fs');
fs.writeFile('helloworld.txt', 'Hello World!', function (err) {
    if (err) 
        return console.log(err);
    console.log('Wrote Hello World in file helloworld.txt, just check it');
});

Inhalt von helloworld.txt:

Hello World!

Aktualisieren:
Wie in Linux-Knoten schreiben im aktuellen Verzeichnis, scheint es in einigen anderen nicht, also füge ich diesen Kommentar nur für den Fall:
Verwenden Sie dies ROOT_APP_PATH = fs.realpathSync('.'); console.log(ROOT_APP_PATH); um zu bekommen, wo die Datei geschrieben ist.


20
2017-10-23 07:54



 var fs = require('fs');
 fs.writeFile(path + "\\message.txt", "Hello", function(err){
 if (err) throw err;
  console.log("success");
}); 

Zum Beispiel: Datei lesen und in eine andere Datei schreiben:

  var fs = require('fs');
    var path = process.cwd();
    fs.readFile(path+"\\from.txt",function(err,data)
                {
                    if(err)
                        console.log(err)
                    else
                        {
                            fs.writeFile(path+"\\to.text",function(erro){
                                if(erro)
                                    console.log("error : "+erro);
                                else
                                    console.log("success");
                            });
                        }
                });

5
2018-05-17 05:54



Synchrones Schreiben

fs.writeFileSync (Datei, Daten [, Optionen])

fs = require('fs');

fs.writeFileSync("synchronous.txt", "synchronous write!")

Asynchrones Schreiben

fs.writeFile (Datei, Daten [, Optionen], Rückruf)

fs = require('fs');

fs.writeFile('asynchronous.txt', 'asynchronous write!', (err) => {
  if (err) throw err;
  console.log('The file has been saved!');
});

Woher

file <string> | <Buffer> | <URL> | <integer> filename or file descriptor
data <string> | <Buffer> | <Uint8Array>
options <Object> | <string>
callback <Function>

Lesen Sie das offizielle Dateisystem (fs) Dokumente.


4
2017-10-01 05:39



Hier verwenden wir w + zum Lesen / Schreiben beider Aktionen und wenn der Dateipfad nicht gefunden wird, würde er automatisch erstellt werden.

fs.open(path, 'w+', function(err, data) {
    if (err) {
        console.log("ERROR !! " + err);
    } else {
        fs.write(data, 'content', 0, 'content length', null, function(err) {
            if (err)
                console.log("ERROR !! " + err);
            fs.close(data, function() {
                console.log('written success');
            })
        });
    }
});

Inhalt bedeutet, was Sie in die Datei schreiben müssen und ihre Länge, "content.length".


2
2017-09-01 11:06