Saya sudah mencoba menemukan cara untuk menulis ke file ketika menggunakan Node.js, tetapi tidak berhasil. Bagaimana saya bisa melakukan itu?
1646
Ada banyak detail di API Sistem File . Cara yang paling umum adalah:
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' }
Bagaimana saya bisa memodifikasi skrip ini sehingga akan berfungsi di luar/tmp
?/home/...
. Secara umum direktori tersebut adalah 755 root: wheel (atau apa pun). Jika simpul ingin menulis file sebagai jane, akan lebih mudah untuk menulis/home/jane/test.txt
. Mengubah/home
ke sesuatu yang lebih permisif dari 755 adalah kesalahan besar./home
direktori saya sarankan untuk chmod itu. Saya tahu ini bisa menghasilkan masalah keamanan. Tapi yah, jika pengguna ingin menyimpan di sana, itu solusinya. PS: Saya setuju dengan apa yang Saudara katakan (:Saat ini ada tiga cara untuk menulis file:
fs.write(fd, buffer, offset, length, position, callback
)Anda harus menunggu panggilan balik untuk memastikan bahwa buffer ditulis ke disk. Itu tidak buffered.
fs.writeFile(filename, data, [encoding], callback)
Semua data harus disimpan pada saat yang sama; Anda tidak dapat melakukan penulisan berurutan.
fs.createWriteStream(path, [options]
)Membuat
WriteStream
, yang nyaman karena Anda tidak perlu menunggu panggilan balik. Tetapi sekali lagi, itu tidak buffered.A
WriteStream
, seperti namanya, adalah aliran. Streaming menurut definisi adalah “buffer” yang berisi data yang bergerak dalam satu arah (sumber ► tujuan). Tetapi aliran yang dapat ditulisi belum tentu "buffered". Aliran adalah "buffered" ketika Anda menulisn
waktu, dan pada saat itun+1
, aliran mengirimkan buffer ke kernel (karena penuh dan perlu memerah).Dengan kata lain: "A buffer" adalah objek. Apakah atau tidak "buffered" adalah properti dari objek itu.
Jika Anda melihat kode,
WriteStream
warisan dariStream
objek yang dapat ditulis . Jika Anda memperhatikan, Anda akan melihat bagaimana mereka menyiram konten; mereka tidak memiliki sistem penyangga.Jika Anda menulis string, itu dikonversi ke buffer, dan kemudian dikirim ke layer asli dan ditulis ke disk. Saat menulis string, mereka tidak mengisi buffer apa pun. Jadi, jika Anda melakukannya:
Kamu lakukan:
Itu tiga panggilan ke lapisan I / O. Meskipun Anda menggunakan "buffer", data tidak buffered. 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()
danuncork()
. Tampaknya fungsi-fungsi ini pada akhirnya akan memungkinkan Anda untuk buffer / flush panggilan tulis.Sebagai contoh, di Jawa ada beberapa kelas yang menyediakan aliran buffer (
BufferedOutputStream
,BufferedWriter
...). Jika Anda menulis tiga byte, byte ini akan disimpan dalam buffer (memori) alih-alih melakukan panggilan I / O hanya untuk tiga byte. Ketika buffer penuh, konten memerah dan disimpan ke disk. Ini meningkatkan kinerja.Saya tidak menemukan apa-apa, hanya mengingat bagaimana akses disk harus dilakukan.
sumber
cork()
danuncork()
bagi kita yang ingin mencoba node 0,11 pra-rilis?npm
mengimplementasikan penulisan buffered?Tentu saja Anda bisa membuatnya sedikit lebih maju. Non-blocking, menulis bit dan potongan, tidak menulis seluruh file sekaligus:
sumber
Sinkron Tulis
Asynchronous Write
Dimana
Layak dibaca File resmi System (fs) docs .
sumber
sumber
fs.write()
) contoh ini hanya berfungsi jika semuanya cukup pendek untuk ditulis dalam satu panggilan tulis.Saya menyukai Indeks ./articles/file-system .
Ini berhasil untuk saya.
Lihat juga Bagaimana cara saya menulis file di node.js? .
Isi dari helloworld.txt:
Pembaruan:
Seperti dalam simpul Linux menulis di direktori saat ini, sepertinya di beberapa orang lain tidak, jadi saya menambahkan komentar ini untuk berjaga-jaga:
Menggunakan ini
ROOT_APP_PATH = fs.realpathSync('.'); console.log(ROOT_APP_PATH);
untuk mendapatkan tempat file ditulis.sumber
Jawaban yang diberikan adalah tanggal dan cara yang lebih baru untuk melakukan ini adalah:
lihat dokumen di sini untuk info lebih lanjut
sumber
(node:23759) ExperimentalWarning: The fs.promises API is experimental
v10.15.0
Saya tahu pertanyaan yang diajukan tentang "tulis" tetapi dalam arti yang lebih umum "tambahkan" mungkin berguna dalam beberapa kasus karena mudah digunakan dalam satu lingkaran untuk menambahkan teks ke file (apakah file ada atau tidak). Gunakan "\ n" jika Anda ingin menambahkan baris misalnya:
sumber
const
bukanvar
, yaituconst fs = require('fs');
, untuk menghindari efek samping yang tidak diinginkan, khususnya jika Anda bekerja dengan basis kode yang agak lebih besar.OK, ini cukup sederhana karena Node memiliki fungsi bawaan untuk ini, ini disebut
fs
kependekan dari File System dan pada dasarnya, modul NodeJS File System ...Jadi pertama-tama memerlukannya di file server.js Anda seperti ini:
fs
memiliki beberapa metode untuk menulis ke file, tetapi cara pilihan saya adalah menggunakanappendFile
, ini akan menambahkan barang ke file dan jika file tidak ada, akan membuat satu, kode bisa seperti di bawah ini:sumber
Misalnya: membaca file dan menulis ke file lain:
sumber
writeFile
?Anda dapat menulis ke file menggunakan fs modul (sistem file).
Berikut adalah contoh bagaimana Anda dapat melakukannya:
Anda mungkin juga ingin menyingkirkan struktur kode callback-inside-callback ini dengan menggunakan Janji dan
async
/await
pernyataan. Ini akan membuat struktur kode asinkron lebih rata. Untuk melakukan itu ada fungsi util.promisify (asli) yang praktis dapat digunakan. Hal ini memungkinkan kita untuk beralih dari panggilan balik ke janji. Lihatlah contoh denganfs
fungsi di bawah ini:sumber
Di sini kita menggunakan w + untuk membaca / menulis kedua tindakan dan jika path file tidak ditemukan maka akan dibuat secara otomatis.
Konten berarti apa yang Anda harus tulis ke file dan panjangnya, 'content.length'.
sumber
Berikut adalah contoh cara membaca file csv dari lokal dan menulis file csv ke lokal.
sumber
Setelah itu, baca artikel panjang ini. Anda harus mengerti cara kerjanya. Jadi, inilah contohnya
createWriteStream()
.sumber
createWriteStream
sudah disebutkan dalam beberapa jawaban beberapa tahun sebelumnya .Anda bisa menggunakan perpustakaan
easy-file-manager
instal dulu dari npm
npm install easy-file-manager
Contoh untuk mengunggah dan menghapus file
sumber
This modules is created to save and remove files.
. Bukan jawaban.Anda dapat menulis dalam file dengan contoh kode berikut:
sumber
writeFile
sudah diberikan sebagai jawaban beberapa kali, bertahun-tahun yang lalu. Apa yang ditambahkan jawaban ini?