Pertanyaan Menulis file dalam Node.js


Saya sudah mencoba mencari cara untuk menulis ke file saat menggunakan Node.js, tetapi tidak berhasil. Bagaimana saya bisa melakukannya?


1139
2018-03-23 00:25


asal


Jawaban:


Ada banyak detail di API filesystem. Cara yang paling umum (sejauh yang saya tahu) adalah:

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



Saat ini ada tiga cara untuk menulis file:

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

    Anda perlu menunggu panggilan balik untuk memastikan bahwa buffer ditulis ke disk. Itu bukan buffered.

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

    Semua data harus disimpan pada saat yang bersamaan; Anda tidak dapat melakukan penulisan sekuensial.

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

    Menciptakan a WriteStream, yang nyaman karena Anda tidak perlu menunggu panggilan balik. Tetapi sekali lagi, itu tidak buffered.

SEBUAH WriteStream, seperti namanya, adalah aliran. Aliran berdasarkan definisi adalah "buffer" yang berisi data yang bergerak dalam satu arah (sumber ► tujuan). Tetapi aliran yang bisa ditulisi tidak harus "buffered". Streaming "buffered" saat Anda menulis n kali, dan pada waktunya n+1, aliran mengirimkan buffer ke kernel (karena penuh dan perlu memerah).

Dengan kata lain: "Buffer" adalah objek. Apakah atau tidak itu "buffered" adalah milik objek itu.

Jika Anda melihat kode, WriteStream mewarisi dari yang dapat ditulis Stream obyek. Jika Anda memperhatikan, Anda akan melihat bagaimana mereka menyiram konten; mereka tidak memiliki sistem penyangga.

Jika Anda menulis string, itu diubah menjadi buffer, lalu dikirim ke lapisan asli dan ditulis ke disk. Saat menulis string, mereka tidak mengisi buffer apa pun. Jadi, jika Anda melakukannya:

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

Kamu lakukan:

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

Itu tiga panggilan ke lapisan I / O. Meskipun Anda menggunakan "buffer", data tidak di-buffer. Aliran buffered akan melakukan: fs.write(new Buffer ("abc")), satu panggilan ke lapisan I / O.

Sampai sekarang, di Node.js v0.12 (versi stabil diumumkan 02/06/2015) sekarang mendukung dua fungsi: cork() dan uncork(). Tampaknya fungsi-fungsi ini akhirnya akan memungkinkan Anda untuk menyangga / menyiram panggilan tulis.

Misalnya, di Jawa ada beberapa kelas yang menyediakan aliran buffered (BufferedOutputStream, BufferedWriter...). Jika Anda menulis tiga byte, byte ini akan disimpan dalam buffer (memori) daripada melakukan panggilan I / O hanya untuk tiga byte. Ketika buffer penuh, isi akan memerah dan disimpan ke disk. Ini meningkatkan kinerja.

Saya tidak menemukan apa pun, hanya mengingat bagaimana akses disk harus dilakukan.


430
2017-08-05 15:28



Anda tentu saja dapat membuatnya sedikit lebih maju. Non-blocking, menulis bit dan potongan, tidak menulis keseluruhan file sekaligus:

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



aku suka Indeks ./articles/file-system.

Itu berhasil bagi saya.

Lihat juga Bagaimana cara saya menulis file di 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');
});

Isi dari helloworld.txt:

Hello World!

Memperbarui:
Seperti di Linux node menulis di direktori saat ini, tampaknya di beberapa yang lain tidak, jadi saya tambahkan komentar ini untuk berjaga-jaga:
Menggunakan ini ROOT_APP_PATH = fs.realpathSync('.'); console.log(ROOT_APP_PATH); untuk mendapatkan di mana file tersebut ditulis.


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");
}); 

Misalnya: baca file dan tulis ke file lain:

  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



Synchronous Write

fs.writeFileSync (file, data [, opsi])

fs = require('fs');

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

Asynchronous Write

fs.writeFile (file, data [, opsi], callback)

fs = require('fs');

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

Sudah

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

Layak membaca File System resmi (fs) dokumen.


4
2017-10-01 05:39