0 XP
?
Intermédiaire40 min25 XP

Objectifs de cette leçon

  • Lire des fichiers avec readFileSync
  • Écrire des fichiers avec writeFileSync
  • Comprendre les opérations synchrone et asynchrone

Système de fichiers (fs) 📁

Lire et écrire des fichiers

Node.js fournit le module fs pour interagir avec le système de fichiers. On privilégie la version promises (async/await).


Lire un fichier

import fs from 'node:fs/promises';
import path from 'node:path';

// Méthode 1 : async/await (recommandé)
const contenu = await fs.readFile('data.txt', 'utf-8');
console.log(contenu);

// Méthode 2 : avec gestion d'erreur
try {
  const data = await fs.readFile('config.json', 'utf-8');
  const config = JSON.parse(data);
  console.log(config);
} catch (err) {
  if (err.code === 'ENOENT') {
    console.error('Fichier introuvable');
  } else {
    throw err;
  }
}

Écrire un fichier

import fs from 'node:fs/promises';

// Écraser le fichier entièrement
await fs.writeFile('output.txt', 'Bonjour le monde !', 'utf-8');

// Ajouter à la fin du fichier (append)
await fs.appendFile('logs.txt', '\nNouvelle ligne de log', 'utf-8');

// Écrire du JSON
const donnees = { nom: "Alice", age: 25 };
await fs.writeFile('user.json', JSON.stringify(donnees, null, 2), 'utf-8');

💡 JSON.stringify(data, null, 2) formate le JSON avec des indentations pour une lecture agréable.


Créer et supprimer

import fs from 'node:fs/promises';

// Créer un répertoire
await fs.mkdir('src/components', { recursive: true });

// Supprimer un fichier
await fs.unlink('fichier-temp.txt');

// Supprimer un répertoire (doit être vide)
await fs.rmdir('dossier-vide');

// Renommer / déplacer
await fs.rename('ancien.txt', 'nouveau.txt');

// Lister le contenu d'un dossier
const fichiers = await fs.readdir('src');
console.log(fichiers); // ['app.js', 'utils.js', 'components']

Infos sur un fichier

import fs from 'node:fs/promises';

const stats = await fs.stat('package.json');

console.log(stats.isFile());       // true
console.log(stats.isDirectory());  // false
console.log(stats.size);           // 1024 (en octets)
console.log(stats.mtime);          // Date de dernière modification

Gestion des erreurs

import fs from 'node:fs/promises';

async function lireSiExiste(chemin) {
  try {
    return await fs.readFile(chemin, 'utf-8');
  } catch (err) {
    if (err.code === 'ENOENT') {
      return null; // Fichier n'existe pas
    }
    throw err; // Autre erreur → on relance
  }
}

const contenu = await lireSiExiste('config.json');
if (contenu) {
  console.log('Config trouvée');
} else {
  console.log('Pas de config, utilisation des valeurs par défaut');
}

Copier un dossier récursivement

import fs from 'node:fs/promises';
import path from 'node:path';

async function copierDossier(src, dest) {
  await fs.mkdir(dest, { recursive: true });
  const entries = await fs.readdir(src, { withFileTypes: true });

  for (const entry of entries) {
    const srcPath = path.join(src, entry.name);
    const destPath = path.join(dest, entry.name);

    if (entry.isDirectory()) {
      await copierDossier(srcPath, destPath);
    } else {
      await fs.copyFile(srcPath, destPath);
    }
  }
}

Résumé

MéthodeAction
fs.readFile()Lire un fichier
fs.writeFile()Écrire/écraser un fichier
fs.appendFile()Ajouter à un fichier
fs.mkdir()Créer un dossier
fs.readdir()Lister un dossier
fs.unlink()Supprimer un fichier
fs.rename()Renommer / déplacer
fs.stat()Infos sur un fichier

Exercices 🎯

  1. Écris un script qui lit un fichier JSON et affiche ses clés
  2. Écris un script qui crée un dossier logs/ et y écrit un fichier avec la date du jour
  3. Crée un copier.js qui copie récursivement un dossier source vers un dossier destination

⚡ Simulateur — Système de fichiers

Étape 1/4
📝 Pseudo-code
1const fs = require("fs");
2fs.writeFileSync("test.txt", "Bonjour");
3const data = fs.readFileSync("test.txt", "utf8");
4console.log(data);
⚙️ Exécution
📦 Mémoire
Aucune variable
🔀 Flux d'exécution
require("fs")
3
Import du module fs

require("fs") importe le module filesystem de Node.js, qui permet de lire et écrire des fichiers.