Node fs, module nodejs pour “File System”, permet aux développeurs de créer et gérer des fichiers pour y stocker ou lire des fichiers dans un programme Node
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.
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 :
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.
Le module fs Node propose trois fonctions pour créer un nouveau fichier :
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éé !');});
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éé !');});
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éé !');});
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); });
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 :
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 !');});
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 !');});
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 !'); }); });});
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();
Selon la version de Node que vous utilisez, deux options s’offrent à vous pour copier un fichier :
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
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é !');});
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é !');});
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é !');});
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é');}
Les maladies inflammatoires chroniques de l’intestin ou "MICI" sont invisibles, mais leurs impacts sur la…
Depuis l'été, j'ai un Pixel qui intègre à la fois un TPU (Tensor Processing Unit)…
On se retrouve dans un nouvel article avec toutes les infos sur cette nouvelle saison…
Pourquoi l’inclusion numérique est essentielle : le point avec Mathieu Froidure. Dans un monde de…
Elles sont passées où les femmes dans la tech ? Entre le manque de représentation…