Node.js fournit un module intégré appelé fs (File System) pour interagir avec le système de fichiers. Avec ce module, vous pouvez effectuer des opérations de lecture et d'écriture de fichiers de manière synchrone ou asynchrone.

Lecture de Fichiers

Lecture Asynchrone:

const fs = require('fs');

fs.readFile('chemin/vers/le/fichier.txt', 'utf8', (err, data) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log(data);
});
 

Lecture Synchrone:

const fs = require('fs');

try {
  const data = fs.readFileSync('chemin/vers/le/fichier.txt', 'utf8');
  console.log(data);
} catch (err) {
  console.error(err);
}

Dans les exemples ci-dessus, 'utf8' spécifie l'encodage du fichier. Si vous lisez des fichiers binaires, omettez l'encodage pour obtenir un Buffer au lieu d'une string.

Écriture de Fichiers

Écriture Asynchrone:

const fs = require('fs');

const content = 'Quelque contenu à écrire dans le fichier';

fs.writeFile('chemin/vers/le/fichier.txt', content, 'utf8', (err) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log('Fichier écrit avec succès');
});

Écriture Synchrone:

const fs = require('fs');

const content = 'Quelque contenu à écrire dans le fichier';

try {
  fs.writeFileSync('chemin/vers/le/fichier.txt', content, 'utf8');
  console.log('Fichier écrit avec succès');
} catch (err) {
  console.error(err);
}

Ajout de Contenu à un Fichier Existant

Ajout Asynchrone:

const fs = require('fs');

const content = '\nNouvelle ligne à ajouter';

fs.appendFile('chemin/vers/le/fichier.txt', content, 'utf8', (err) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log('Contenu ajouté avec succès');
});

Ajout Synchrone:

const fs = require('fs');

const content = '\nNouvelle ligne à ajouter';

try {
  fs.appendFileSync('chemin/vers/le/fichier.txt', content, 'utf8');
  console.log('Contenu ajouté avec succès');
} catch (err) {
  console.error(err);
}

Conseils d'Utilisation

  • Asynchrone vs Synchrone: Les opérations asynchrones sont généralement préférées car elles ne bloquent pas le thread principal de Node.js. Les opérations synchrones peuvent être plus simples à écrire et à comprendre, mais elles peuvent ralentir votre application si elles sont utilisées pour des fichiers volumineux ou en grande quantité.
  • Gestion des Erreurs: Toujours vérifier les erreurs dans les callbacks asynchrones et utiliser des blocs try/catch pour les opérations synchrones.
  • Streams: Pour lire ou écrire de grands fichiers, envisagez d'utiliser des streams pour éviter de charger tout le contenu du fichier en mémoire à la fois.
  • Promises et Async/Await: À partir de Node.js v10.0.0, vous pouvez utiliser fs.promises ou util.promisify pour travailler avec des promesses au lieu de callbacks, ce qui permet d'utiliser async/await pour un code plus lisible.

Exemple avec Promises et Async/Await

Lecture de Fichier avec Promises:

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

async function lireFichier(chemin) {
  try {
    const data = await fs.readFile(chemin, 'utf8');
    console.log(data);
  } catch (err) {
    console.error(err);
  }
}

lireFichier('chemin/vers/le/fichier.txt');

Écriture de Fichier avec Promises:

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

async function ecrireFichier(chemin, contenu) {
  try {
    await fs.writeFile(chemin, contenu, 'utf8');
    console.log('Fichier écrit avec succès');
  } catch (err) {
    console.error(err);
  }
}

ecrireFichier('chemin/vers/le/fichier.txt', 'Quelque contenu à écrire');

 

En utilisant fs.promises, vous pouvez écrire du code asynchrone qui est plus proche du style synchrone traditionnel, tout en conservant les avantages de l'asynchronisme.

Modifié le: jeudi 2 novembre 2023, 06:09