Node fs : comment utiliser File System de NodeJS?

Lucas Roquilly

Publié le 28 avril 2020

Créer et gérer des fichiers pour y stocker ou lire des informations font partie des tâches les plus communes d’un serveur. Environnement d’exécution JavaScript côté serveur pensé pour faire gagner du temps aux développeurs, Node.js propose une façon intuitive de travailler avec le système de fichiers à travers son module fs pour “File System”.

Dans ce tutoriel, découvrez comment fonctionnent le module Node FS et ses fonctions principales dans ce guide complet.

Node fs : comment fonctionne le gestionnaire de fichiers Node ?

Le module fs est livré nativement avec Node js. Pour l’inclure dans votre projet, utilisez simplement la fonction require :

const fs = require('fs');

Vous avez désormais accès à un certain nombre de fonctions dont les principales sont :

  • Créer des fichiers
  • Lire des fichiers
  • Écrire dans des fichiers
  • Copier des fichiers
  • Renommer des fichiers
  • Supprimer des fichiers

D’autres fonctions sont disponibles : créer, supprimer ou renommer un dossier ; gérer les permissions relatives à un fichier ; créer des liens symboliques ou tronquer un fichier, etc.

Une chose singulière est à noter sur le module node fs : toutes les fonctions sont asynchrones par défaut (elles ne bloquent pas le code et fonctionnent en arrière-plan) mais peuvent aussi fonctionner synchroniquement. Il suffit alors d’ajouter Sync au nom de la fonction. Par exemple : la fonction pour renommer un fichier fs.readFile() devient fs.readFileSync(). Vous trouverez plus d’informations sur les fonctions fs synchrones plus bas dans le guide.

Create file Node Js : la création de fichier

Le module fs Node propose trois fonctions pour créer un nouveau fichier :

  • fs.appendFile()
  • fs.open()
  • fs.writeFile()

Créer un fichier avec fs.appendFile()

La fonction fs.appendFile() permet d’ajouter du contenu à un fichier. Si le fichier n’existe pas, il est créé.

const fs = require('fs');
fs.appendFile('nouveauFichier.txt', 'Mon contenu', function (err) {
   if (err) throw err;
   console.log('Fichier créé !');
});

Créer un fichier vide avec fs.open()

La fonction fs.open() permet d’ouvrir un fichier avec une certaine autorisation. Si l’argument “w” (pour “writing”) est spécifié en deuxième paramètre, le fichier sera ouvert pour écriture. S’il n’existe pas, un fichier vide est créé.

const fs = require('fs');
fs.open('nouveauFichier.txt', 'w', function (err, file) {
   if (err) throw err;
   console.log('Fichier créé !');
});

Créer un fichier avec fs.writeFile()

La fonction fs.writeFile() permet de remplacer le contenu d’un fichier avec node fs. Si le fichier n’existe pas, un fichier est créé avec le contenu spécifié.

const fs = require('fs');
fs.writeFile('nouveauFichier.txt', 'Mon contenu', function (err) {
   if (err) throw err;
   console.log('Fichier créé !');
});

Node Read File : lire vos fichiers

La fonction fs.readFile() permet de lire un fichier. N’oubliez pas de préciser l’encodage nécessaire à la lecture ! En effet, si vous avez inséré du contenu nécessitant l’encodage utf8 (qui gère tous les caractères spéciaux de tous les alphabets du monde), spécifiez cet encodage en deuxième paramètre de la fonction. Sinon, le contenu de votre fichier ne sera pas interprété comme étant écrit en utf8 et provoquera des erreurs d’interprétation par le module fs.

const fs = require('fs');

 fs.readFile('nouveauFichier.txt', 'utf8', function(err, data) {
   const content = data;
   console.log(content);
 });

Node FS Write : écrire dans vos fichiers

Le fs module Node propose plusieurs fonctions pour écrire dans vos fichiers, dont celles que l’on a déjà vues dans la création de fichier :

  • fs.appendFile()
  • fs.writeFile()
  • fs.write()
  • fs.createWriteStream

Mettre à jour un fichier avec fs.appendFile()

La fonction fs.appendFile() permet d’ajouter du contenu à la fin d’un fichier avec node fs.

const fs = require('fs');

fs.appendFile('nouveauFichier.txt', ' - Mon nouveau contenu', function (err) {
   if (err) throw err;
   console.log('Fichier mis à jour !');
});

Remplacer le contenu d’un fichier avec fs.writeFile()

La fonction fs.writeFile() permet de remplacer le contenu d’un fichier avec un autre contenu.

const fs = require('fs');

fs.writeFile('nouveauFichier.txt', 'Mon nouveau contenu', function (err) {
   if (err) throw err;
   console.log('Fichier mis à jour !');
});

Mettre à jour un fichier avec fs.write()

La fonction fs.write() de node fs permet un contrôle plus étendu sur votre édition de fichier. Elle est à utiliser lorsque vous savez précisément à quel octet précis de votre fichier vous souhaitez insérer du contenu.

const fs = require('fs');

fs.open('nouveauFichier.txt', 'w+', (err, fd) => {
   let buf = Buffer.from('Mon nouveau contenu'),
   pos = 0,offset = 0,
   len = buf.length;
   fs.write(fd, buf, offset, len, pos, (err,bytes,buff) => {
      let buf2 = Buffer.alloc(len);
      fs.read(fd,buf2,offset, len, pos,(err,bytes,buff2) => {
         console.log('Fichier mis à jour !');
      });
    });
});

Écrire dans un fichier via un flux avec fs.createWriteStream()

La fonction fs.createWriteStream() permet de créer un flux et de l’écrire dans un fichier. Utiliser un flux permet d’écrire dans un fichier en plusieurs fois à intervalles réguliers, ce qui économise l’usage de RAM car le fichier n’est pas chargé complètement en mémoire. Cette méthode est à préférer pour la gestion de fichiers particulièrement lourds.

const fs = require('fs');

let writeStream = fs.createWriteStream('nouveauFichier.txt');
writeStream.write('Mon contenu de flux', 'utf-8');
writeStream.on('finish', () => {
   console.log('Fichier mis à jour !');
});

writeStream.end();

Node FS pour copier vos fichiers

Selon la version de Node que vous utilisez, deux options s’offrent à vous pour copier un fichier :

  • fs.createReadStream() et fs.createWriteStream() - avant node v8.5.0
  • fs.copyFile() - depuis node v8.5.0

Copier un fichier avec fs.createReadStream() et fs.createWriteStream()

Combiner fs.createReadStream() et fs.createWriteStream() permet de copier un fichier en une seule ligne de code.

const fs = require('fs');

fs.createReadStream('nouveauFichier.txt').pipe(fs.createWriteStream('nouveauFichier_copie.txt'));

JavaScript

Copier un fichier avec fs.copyFile()

Depuis node v.8.5.0, la fonction fs.copyFile() a été introduite et permet de copier un fichier.

const fs = require('fs');

fs.copyFile('nouveauFichier.txt', 'nouveauFichier_copie.txt', (err) => {
 if (err) throw err;
 console.log('Fichier copié !');
});

Rename file Node Js : pour renommer vos fichiers

La fonction fs.rename() permet de renommer un fichier.

const fs = require('fs');

fs.rename('nouveauFichier.txt', 'fichier.txt', function (err) {
 if (err) throw err;
 console.log('Fichier renommé !');
});

Node FS pour supprimer vos fichiers

La fonction fs.unlink() permet de supprimer un fichier.

const fs = require('fs');

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

ReadFileSync : les fonctions synchrones du module Node fs

Les fonctions du module fs de NodeJS s’exécutent de façon asynchrone par défaut, c’est-à-dire qu’elles ne bloquent pas l’exécution du code avant d’être terminées : elles fonctionnent à l’arrière-plan.

Ces fonctions node fs peuvent également s'exécuter de façon synchrone ou bloquante. L’exécution du reste du code est alors suspendue le temps que la fonction se termine et retourne son résultat.

Pour exécuter une fonction fs synchroniquement, il suffit de rajouter Sync à la fin de la fonction. Par exemple, fs.readFile() devient fs.readFileSync().

Cela peut avoir une énorme incidence sur votre façon de travailler. Par exemple, la fonction fs.rename() s’utilise avec un callback qui signifie la fin de l’exécution de la fonction node fs :

const fs = require('fs')

fs.rename('fichier.txt', 'fichierRenommé.txt', err => {
 if (err) return console.error('Erreur : le fichier n\'a pu être renommé');
 console.log('Fonction rename terminée');
})

À l’inverse, la fonction fs.renameSync() s’utilise plutôt avec un block try/catch :

const fs = require('fs')

try {
   fs.renameSync('fichier.txt', 'fichierRenommé.txt')
} catch (err) {
   console.error('Erreur : le fichier n\'a pu être renommé');
}

Derniers articles

Le dernier né des bases de données AWS, MemoryDB for Redis allie la souplesse et rapidité de Redis avec une sauvegarde résiliente, chose qui aujourd'hui n'existait que pour la solution Redis Entreprise. Avec MemoryDB for Redis, AWS entend bien prendre une part du gâteau de Redis Labs.

MongoDB a mis en service la version 5.0 de sa base de données NoSQL. Dans cet article, découvrez les nouveautés qu'apporte cette release ainsi que leurs explications.

Dans l'univers du Big Data et du Cloud, Snowflake a vu le jour en étant le premier fournisseur d'un Data Warehouse sur le cloud 100% scalable. Dans cet article, découvrez ce qu'est un Data Warehouse et en quoi Snowflake est une solution innovante pour les entreprises.

Souvent portée par une équipe d'analystes, la QA vient supporter l'équipe tech pour assurer que les évolutions en cours de développement et récemment déployés ne viennent pas perturber l'application. Dans cet article, découvrez comment les méthodes Shift-Left et Shift-Right viennent se complémenter pour assurer un bon niveau de qualité du logiciel déployé.

Docker Desktop est le client permettant de faire tourner des containers depuis son poste. Découvre ce tutoriel pour installer Docker sur ton Mac et faire tourner tes premiers containers.

Docker Desktop est le client permettant de faire tourner des containers depuis son poste. Découvre ce tutoriel pour installer Docker sur ton PC Windows et faire tourner tes premiers containers.

Les Jobs