Modul fs: Membaca & Menulis Berkas

Bekerja dengan berkas dan folder memakai fs: baca, tulis, tambah, cek keberadaan, daftar folder, dan JSON.

Part 11 dari 24 ± 35 menit Gratis

fs: file system

Modul fs memberi akses ke berkas dan folder. Hampir setiap fungsi punya tiga bentuk:

BentukContohSifat
Sinkronfs.readFileSync(p)Memblokir sampai selesai; melempar error
Callbackfs.readFile(p, cb)Asinkron, error-first
Promisefs.promises.readFile(p) / require('fs/promises')Asinkron, async/await

Di bab ini kita memakai versi sinkron karena paling sederhana untuk skrip kecil dan konfigurasi saat startup. Di server yang melayani banyak pengguna, gunakan versi asinkron (bab berikutnya) agar event loop tidak terblokir.

Membaca dan menulis

const fs = require('fs');

fs.writeFileSync('catatan.txt', 'Baris pertama\n');       // buat / TIMPA berkas
fs.appendFileSync('catatan.txt', 'Baris kedua\n');        // tambah di akhir
const isi = fs.readFileSync('catatan.txt', 'utf8');       // baca sebagai teks
console.log(isi.split('\n'));

Tanpa argumen encoding ('utf8'), readFileSync mengembalikan Buffer (data biner), bukan string.

Keberadaan, folder, dan hapus

fs.existsSync('catatan.txt');                 // true / false
fs.mkdirSync('laporan/2026', { recursive: true });   // buat folder bertingkat
fs.readdirSync('.');                          // daftar nama isi folder
fs.statSync('catatan.txt').size;              // ukuran dalam byte
fs.statSync('laporan').isDirectory();         // true
fs.renameSync('lama.txt', 'baru.txt');
fs.unlinkSync('baru.txt');                    // hapus berkas
fs.rmSync('laporan', { recursive: true, force: true });  // hapus folder

Menangani error

Operasi fs bisa gagal: berkas tidak ada, tidak ada izin, folder bukan berkas. Error membawa properti code yang bisa dibedakan:

try {
  fs.readFileSync('tidak-ada.txt', 'utf8');
} catch (err) {
  if (err.code === 'ENOENT') console.log('Berkas tidak ditemukan');
  else throw err;                  // error lain: jangan ditelan
}
KodeArti
ENOENTBerkas/folder tidak ada
EEXISTSudah ada
EACCESTidak punya izin
EISDIRTernyata sebuah folder
ENOTEMPTYFolder tidak kosong

JSON: format konfigurasi yang paling umum

const konfig = JSON.parse(fs.readFileSync('konfig.json', 'utf8'));
konfig.pajak = 0.12;
fs.writeFileSync('konfig.json', JSON.stringify(konfig, null, 2));

Jalur relatif dan __dirname

Ingat dari bab path: 'catatan.txt' dihitung dari folder kerja proses, bukan folder skrip. Pakai path.join(__dirname, 'catatan.txt') bila lokasinya harus tetap.

Kapan berkas besar jadi masalah?

readFileSync memuat seluruh berkas ke memori. Untuk berkas besar (ratusan MB), gunakan stream (bab selanjutnya).

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X