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éthode | Action |
|---|---|
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 🎯
- Écris un script qui lit un fichier JSON et affiche ses clés
- Écris un script qui crée un dossier
logs/et y écrit un fichier avec la date du jour - Crée un
copier.jsqui 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.