Travailler avec le système de fichiers dans Node.js : guide complet
Dans le développement web moderne, savoir travailler efficacement avec le système de fichiers est l'une des compétences clés d'un développeur backend. Node.js fournit un module fs (File System) puissant et flexible, qui permet d'effectuer toutes les opérations de base sur les fichiers et les répertoires : lecture, écriture, suppression, renommage et bien plus encore. Dans cet article, nous allons détailler comment travailler avec le système de fichiers dans Node.js, examiner les méthodes synchrones et asynchrones, ainsi qu'étudier la gestion des chemins.
Importation du module fs et principes de base
Pour commencer à travailler avec le système de fichiers dans Node.js, il est nécessaire d'importer le module intégré fs. Cela se fait avec une seule ligne de code :
const fs = require('fs');Le module fs fournit à la fois des méthodes synchrones et asynchrones. Les méthodes asynchrones acceptent généralement une fonction callback comme dernier argument et sont préférées pour le code de production, car elles ne bloquent pas l'event loop. Les méthodes synchrones se terminent par Sync et peuvent être utiles lors de l'initialisation de l'application ou dans des scripts.
De plus, depuis Node.js 10, il est possible de travailler avec fs/promises — une version des méthodes qui retournent des promesses :
const fs = require('fs/promises');Dans cet article, nous utiliserons principalement l'approche asynchrone avec les promesses, car elle est la plus moderne et la plus pratique.
Lecture de fichiers dans Node.js
La lecture de fichiers est l'une des opérations les plus courantes. Examinons trois méthodes principales.
Lecture complète d'un fichier (asynchrone)
La méthode fs.readFile() lit le contenu d'un fichier entièrement en mémoire. C'est pratique pour les petits fichiers.
const fs = require('fs/promises');
async function readFileExample() { try { const data = await fs.readFile('example.txt', 'utf8'); console.log('Contenu du fichier :', data); } catch (err) { console.error('Erreur lors de la lecture du fichier :', err); }}
readFileExample();Lecture ligne par ligne d'un fichier (lecture par flux)
Pour les gros fichiers, il est préférable d'utiliser des flux (streams) ou de lire le fichier ligne par ligne avec readline :
const fs = require('fs');const readline = require('readline');
async function readFileLineByLine() { const fileStream = fs.createReadStream('large-file.txt'); const rl = readline.createInterface({ input: fileStream, crlfDelay: Infinity });
for await (const line of rl) { console.log('Ligne :', line); }}
readFileLineByLine();Lecture synchrone
Si vous avez besoin de lire un fichier immédiatement et que vous êtes prêt à bloquer l'exécution :
const fs = require('fs');
try { const data = fs.readFileSync('example.txt', 'utf8'); console.log(data);} catch (err) { console.error(err);}Écriture et mise à jour de fichiers
Node.js fournit plusieurs méthodes pour écrire des données dans des fichiers.
Écriture dans un fichier (écrasement)
La méthode fs.writeFile() crée un nouveau fichier ou écrase un fichier existant :
const fs = require('fs/promises');
async function writeFileExample() { try { await fs.writeFile('output.txt', 'Bonjour, le monde !', 'utf8'); console.log('Fichier écrit avec succès'); } catch (err) { console.error('Erreur d\\'écriture :', err); }}
writeFileExample();Ajout de données à la fin d'un fichier
Si vous devez ajouter des données sans supprimer les existantes, utilisez fs.appendFile() :
const fs = require('fs/promises');
async function appendToFile() { try { await fs.appendFile('log.txt', `Nouvelle entrée : ${new Date()}`); console.log('Données ajoutées'); } catch (err) { console.error('Erreur :', err); }