Menu

fs.writeFile Node.js: Menulis, Append dan Membuat File

Tulis file di Node.js dengan fs.writeFile, fs.writeFileSync, atau await writeFile dari fs/promises. File dibuat kalau belum ada dan diganti kalau sudah ada; pakai appendFile untuk menambah di akhir.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

fs.writeFile(path, data, callback) menulis string atau Buffer ke sebuah file. Kalau file-nya belum ada, Node membuatnya; kalau sudah ada, isi lamanya diganti. fs.writeFileSync(path, data) melakukan hal yang sama dan menunggu sampai penulisan selesai, sedangkan fs.appendFile menambah di akhir file alih-alih menggantinya.

Hasilnya saved lalu teks yang dibaca kembali; callback hanya menerima error (atau null), tidak pernah datanya. Berikan 42 alih-alih string dan panggilannya melempar TypeError: datanya harus string atau Buffer.

writeFile, writeFileSync dan fs/promises

Ketiga bentuk ini menerima argumen yang sama dan berbeda dalam cara kamu menunggu hasilnya.

const fs = require('fs');
const fsp = require('fs/promises');

fs.writeFileSync('a.txt', 'one');            // blocks, throws on error

fs.writeFile('b.txt', 'two', (err) => {});   // callback with err

await fsp.writeFile('c.txt', 'three');       // promise, use in async code

Pakai writeFileSync di script dan kode startup, dan versi promise di server, karena penulisan sync memblokir setiap request lain sampai disk selesai. Halaman fs/promises menunjukkan sisa API promise-nya.

Menambah ke file dengan appendFile

writeFile mengganti seluruh file. Untuk menambah satu baris ke log, pakai appendFile, yang juga membuat file-nya saat pertama kali.

Pembacaan pertama mencetak "second\n", karena writeFileSync kedua menggantikan first, dan pembacaan kedua mencetak "second\nthird\nfourth\n" (JSON.stringify membuat newline-nya terlihat). Tambahkan \n sendiri: kedua fungsi tidak menambahkannya.

writeFileappendFile
File belum adaMembuatnyaMembuatnya
File sudah adaMengganti isinyaMenambah di akhir
Flag default'w''a'
Penggunaan umumMenyimpan seluruh dokumen atau JSONLog, satu baris setiap kali

Jangan menimpa: opsi flag

Argumen ketiga bisa berupa object opsi. flag-nya menentukan apa yang terjadi pada file yang sudah ada. 'wx' berarti "tulis, tetapi gagal kalau file sudah ada", cara aman untuk membuat file hanya sekali.

Panggilan kedua gagal dengan EEXIST, jadi file-nya tetap berisi abc123. Ganti nama file di panggilan kedua menjadi id2.txt dan kedua panggilan mencetak created.

Flag yang paling sering kamu temui: 'w' (default, ganti), 'a' (append), 'wx' (hanya buat baru), dan 'ax' (append, tetapi hanya ke file baru).

Mengecek dengan fs.existsSync dulu lalu menulis punya celah: proses lain bisa membuat file di antara pengecekan dan penulisan. 'wx' melakukan keduanya dalam satu langkah.

writeFile tidak menerima object. Ubah menjadi teks dengan JSON.stringify; argumen ketiganya, 2, memberi indentasi pada output supaya file-nya mudah dibaca.

File-nya berisi object itu dalam beberapa baris berindentasi, dan mem-parse-nya kembali menghasilkan object yang setara, jadi baris terakhir mencetak 2. Berikan object tanpa JSON.stringify dan panggilannya melempar TypeError.

Buat foldernya dulu dengan mkdir

writeFile membuat file, bukan folder. Menulis ke reports/2026/june.txt saat reports belum ada akan gagal dengan ENOENT. Buat path-nya dulu dengan mkdir dan { recursive: true }, yang membuat setiap folder yang belum ada dan tidak melakukan apa-apa kalau sudah ada.

Penulisan pertama gagal dengan ENOENT; setelah mkdir, penulisan yang sama berhasil dan readdir menampilkan [ 'june.txt' ]. Di kode sungguhan, susun path seperti ini dengan path.join supaya juga bekerja di Windows.

Kesalahan umum

Mengira file langsung tertulis setelah pemanggilan. fs.writeFile kembali sebelum datanya ada di disk. Baca file-nya atau mulai langkah berikutnya di dalam callback, atau await versi promise-nya.

Kehilangan data karena menulis di dalam perulangan. Memanggil writeFile sekali per item mengganti file setiap kali, sehingga hanya item terakhir yang tersisa. Pakai appendFile, atau susun seluruh string-nya lalu tulis sekali.

Menulis [object Object]. Melewatkan object lewat String() atau template literal menghasilkan [object Object]. Pakai JSON.stringify.

Pertanyaan yang sering diajukan

Apakah fs.writeFile menimpa file?

Ya. Dengan flag default 'w', fungsi ini mengosongkan file lalu menulis data baru, jadi isi lamanya hilang. Berikan { flag: 'a' } atau pakai appendFile untuk menambah di akhir.

Apakah fs.writeFile membuat file kalau belum ada?

Ya, file-nya dibuat. Tetapi folder yang belum ada tidak ikut dibuat: menulis ke logs/app.log saat logs tidak ada akan gagal dengan ENOENT.

Apa saja yang bisa diberikan sebagai data?

String, Buffer, atau typed array. Selain itu, seperti object atau angka, akan melempar TypeError, jadi ubah object dengan JSON.stringify dan angka dengan String() lebih dulu.

Amankah memanggil writeFile berkali-kali sekaligus pada file yang sama?

Tidak. Dua panggilan writeFile pada satu file secara paralel bisa saling menyela dan meninggalkan isi yang tercampur. Tunggu satu selesai sebelum memulai yang berikutnya, atau kumpulkan datanya lalu tulis sekali.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai