Module fs de Node.js

Java FileModules intégrés de Node.js


Le module fs (système de fichiers) est un module intégré de base dans Node.js, utilisé pour interagir avec le système de fichiers.

Le module fs fournit une série de méthodes pour gérer les opérations sur les fichiers telles que la lecture, l'écriture et la suppression.

Le module fs est l'un des modules les plus couramment utilisés dans le développement Node.js, en particulier dans les scénarios où des fichiers locaux doivent être traités.


Comment utiliser le module fs ?

Pour utiliser le module fs, vous devez d'abord l'importer :

const fs = require('fs');

À partir de Node.js 14, vous pouvez également utiliser la syntaxe d'import ES6 :

Exemple

const fs = require('fs');          // méthode CommonJS
// ou
import fs from 'fs';              // méthode ES Module

Principales méthodes du module fs

1. Lecture de fichier

Lire un fichier de manière synchrone (readFileSync)

Exemple

const data = fs.readFileSync('example.txt', 'utf8');
console.log(data);
  • 'example.txt': le chemin du fichier à lire
  • 'utf8': spécifier le format d'encodage (facultatif)
  • Les méthodes synchrones bloquent l'exécution du code jusqu'à ce que la lecture du fichier soit terminée

Lire un fichier de manière asynchrone (readFile)

Exemple

fs.readFile('example.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log(data);
});
  • Les méthodes asynchrones ne bloquent pas l'exécution du code
  • Gérer les résultats via des fonctions de rappel
  • Le callback error-first est un modèle courant dans Node.js

2. Écriture de fichier

Écrire un fichier de manière synchrone (writeFileSync)

Exemple

fs.writeFileSync('output.txt', 'Hello, Node.js!');

Écrire un fichier de manière asynchrone (writeFile)

Exemple

fs.writeFile('output.txt', 'Bonjour, Node.js !', (err) => {
  if (err) throw err;
  console.log('Fichier enregistré');
});

3. Ajout à un fichier

Ajout synchrone (appendFileSync)

Exemple

fs.appendFileSync('log.txt', 'Nouveau contenu du journal\n');

Ajout asynchrone (appendFile)

Exemple

fs.appendFile('log.txt', 'Nouveau contenu du journal\n', (err) => {
  if (err) throw err;
});

4. Vérification de l'état du fichier (stat)

Exemple

fs.stat('example.txt', (err, stats) => {
  if (err) throw err;
  console.log(`Taille du fichier: ${stats.size} bytes`);
  console.log(`Date de création: ${stats.birthtime}`);
  console.log(`S'il s'agit d'un fichier: ${stats.isFile()}`);
  console.log(`S'il s'agit d'un répertoire: ${stats.isDirectory()}`);
});

5. Suppression de fichier

Supprimer de manière synchrone (unlinkSync)

Exemple

fs.unlinkSync('fileToDelete.txt');

Supprimer de manière asynchrone (unlink)

Exemple

fs.unlink('fileToDelete.txt', (err) => {
  if (err) throw err;
  console.log('Fichier supprimé');
});

Prise en charge de Promise et async/await

Node.js 10+ fournit le module fs/promises, qui prend en charge les API de style Promise :

Exemple

const fs = require('fs').promises;

async function readFile() {
  try {
    const data = await fs.readFile('example.txt', 'utf8');
    console.log(data);
  } catch (err) {
    console.error('Erreur de lecture du fichier :', err);
  }
}

readFile();

Opérations de fichier basées sur les flux

Pour les fichiers volumineux, l'utilisation de flux peut améliorer les performances :

Flux de lecture

Exemple

const readStream = fs.createReadStream('largeFile.txt', 'utf8');

readStream.on('data', (chunk) => {
  console.log('Données reçues :', chunk.length);
});

readStream.on('end', () => {
  console.log('Lecture terminée');
});

readStream.on('error', (err) => {
  console.error('Erreur de lecture :', err);
});

Flux d'écriture

Exemple

const writeStream = fs.createWriteStream('output.txt');

writeStream.write('Première ligne de données\n');
writeStream.write('Deuxième ligne de données\n');
writeStream.end('Dernière ligne de données');

writeStream.on('finish', () => {
  console.log('Écriture terminée');
});

writeStream.on('error', (err) => {
  console.error('Erreur d’écriture :', err);
});

Opérations sur les répertoires

Créer un répertoire

Exemple

fs.mkdir('newFolder', (err) => {
  if (err) throw err;
  console.log('Répertoire créé');
});

Lire le contenu du répertoire

Exemple

fs.readdir('./', (err, files) => {
  if (err) throw err;
  console.log('Contenu du répertoire actuel :', files);
});

Supprimer le répertoire

Exemple

fs.rmdir('emptyFolder', (err) => {
  if (err) throw err;
  console.log('Répertoire supprimé');
});

Bonnes pratiques

  1. Préférez utiliser des méthodes asynchrones: évitez de bloquer la boucle d'événements
  2. Gestion des erreurs: gérez toujours les erreurs possibles
  3. Utilisez des flux pour traiter les fichiers volumineux: améliorez les performances
  4. Gestion des chemins: utilisez le module path pour gérer les problèmes de chemins multiplateformes
  5. Vérification des permissions: vérifiez les permissions de fichier/répertoire avant les opérations

Exemples d'applications pratiques

Fonctionnalité de copie de fichiers

Exemple

const fs = require('fs');

function copyFile(source, target, cb) {
  const readStream = fs.createReadStream(source);
  const writeStream = fs.createWriteStream(target);

  readStream.on('error', cb);
  writeStream.on('error', cb);
 
  readStream.on('close', () => {
    writeStream.end();
    cb(null);
  });
 
  readStream.pipe(writeStream);
}

copyFile('source.txt', 'target.txt', (err) => {
  if (err) return console.error('Échec de la copie :', err);
  console.log('Fichier copié avec succès');
});

Java FileModules intégrés de Node.js

Autres extensions