Node.js Lesson 5: File System
Node.js can read, write, and manage files. This is the “fs” (file system) module — essential for building tools, parsers, and backend apps that handle data.
Reading Files
const fs = require("fs");
// Async (non-blocking) — ALWAYS prefer this
fs.readFile("data.txt", "utf8", (err, data) => {
if (err) { console.error(err); return; }
console.log(data);
});
// Promise-based (modern)
const fsPromises = require("fs").promises;
async function readFile() {
try {
const content = await fsPromises.readFile("data.txt", "utf8");
console.log(content);
} catch (err) {
console.error("File not found:", err.message);
}
}
readFile();
Writing Files
const { writeFile, appendFile, mkdir } = require("fs").promises;
async function main() {
// Create/overwrite a file
await writeFile("log.txt", "First line\n");
// Append to a file
await appendFile("log.txt", "Second line\n");
// Create a directory
await mkdir("output", { recursive: true });
// Write JSON
const data = { name: "Alice", age: 30 };
await writeFile("user.json", JSON.stringify(data, null, 2));
console.log("Done!");
}
main();
Directory Operations
const { readdir, stat, unlink } = require("fs").promises;
async function listFiles(dir) {
const files = await readdir(dir);
for (const file of files) {
const info = await stat(dir + "/" + file);
const size = (info.size / 1024).toFixed(1) + " KB";
const type = info.isDirectory() ? "DIR" : "FILE";
console.log(`${type} ${file.padEnd(30)} ${size}`);
}
}
listFiles(".");
🏋️ Practice Task
Build a “note-taking CLI”. Create notes.json to store notes. Implement: addNote(title, content) — appends to JSON file. listNotes() — reads and displays all notes. deleteNote(id) — removes by ID. Test all three operations.
💡 Hint: Read JSON with JSON.parse(await readFile(“notes.json”, “utf8”)). Catch error when file missing (first run). Always write back with JSON.stringify(notes, null, 2).