Node.js Lesson 5: File System

🟢 Node.js CourseLesson 5 of 15 · 33% complete

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).

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *