Introduction : Pourquoi savoir travailler avec les fichiers en JavaScript ?
\n\nQuand on parle de JavaScript, la plupart des gens pensent immédiatement au navigateur et aux interfaces interactives. Cependant, avec l'apparition de la plateforme Node.js, JavaScript a largement dépassé les limites des pages web. Aujourd'hui, c'est un langage à part entière pour le développement serveur, l'automatisation et les utilitaires. Et l'une des tâches clés rencontrées par chaque développeur est le travail avec le système de fichiers.
\n\nSavoir lire, écrire, déplacer et supprimer des fichiers est une base sans laquelle aucun projet sérieux ne peut être imaginé. Qu'il s'agisse d'un logger, d'un fichier de configuration, du téléchargement d'images ou de l'analyse de données, l'accès au système de fichiers est partout nécessaire.
\n\nDans cet article, nous allons examiner des exemples pratiques de travail avec le système de fichiers dans Node.js. Vous apprendrez à utiliser le module intégré fs, quelles méthodes existent et comment éviter les erreurs typiques. Tout le code peut être exécuté et testé immédiatement.
Méthodes principales du module fs
\n\nLe module fs (File System) fait partie de l'installation standard de Node.js. Il n'est pas nécessaire de l'installer séparément. Pour commencer, il suffit de l'importer au début du fichier :
const fs = require('fs');\nconst fsPromises = require('fs').promises; // pour travailler avec les promesses\n\nToutes les méthodes du module fs existent en trois variantes :
- \n
- Synchrones — bloquent l'exécution du code jusqu'à la fin de l'opération. Ont généralement le suffixe
Sync. \n - Asynchrones avec callbacks — le style classique de Node.js. \n
- Asynchrones basées sur les promesses — l'approche moderne via
fs.promises. \n
Dans les projets modernes, il est recommandé d'utiliser les promesses et async/await. Cela rend le code plus propre et plus compréhensible.
Lecture de fichiers
\n\nLe scénario le plus courant est de lire le contenu d'un fichier. Prenons l'exemple d'un fichier texte data.txt :
const fs = require('fs').promises;\n\nasync function readFileExample() {\n try {\n const data = await fs.readFile('data.txt', 'utf8');\n console.log('Contenu du fichier :');\n console.log(data);\n } catch (err) {\n console.error('Erreur de lecture du fichier :', err.message);\n }\n}\n\nreadFileExample();\n\nLe deuxième paramètre 'utf8' spécifie l'encodage. Si vous l'omettez, vous obtiendrez un tampon brut (Buffer). Pour les fichiers texte, spécifiez toujours l'encodage.
Écriture dans un fichier
\n\nL'écriture de données dans un fichier peut se faire de deux manières : réécriture complète ou ajout à la fin.
\n\nRéécriture du fichier :
\nconst fs = require('fs').promises;\n\nasync function writeFileExample() {\n try {\n await fs.writeFile('output.txt', 'Bonjour, système de fichiers !');\n console.log('Fichier écrit avec succès');\n } catch (err) {\n console.error('Erreur d\'écriture :', err.message);\n }\n}\n\nwriteFileExample();\n\nAjout à la fin du fichier :
\nconst fs = require('fs').promises;\n\nasync function appendFileExample() {\n try {\n await fs.appendFile('log.txt', `Nouvelle entrée : ${new Date().toISOString()}\\n`);\n console.log('Données ajoutées');\n } catch (err) {\n console.error('Erreur d\'ajout :', err.message);\n }\n}\n\nappendFileExample();\n\nLa méthode appendFile est idéale pour la tenue de logs ou l'accumulation de données.
Gestion des répertoires et fichiers
\n\nLe travail avec le système de fichiers ne se limite pas à la lecture et à l'écriture. Il est souvent nécessaire de créer des dossiers, de vérifier l'existence de fichiers ou de les supprimer.
\n\nCréation et suppression de répertoires
\n\nconst fs = require('fs').promises;\n\nasync function manageDirectories() {\n try {\n // Création d'un répertoire (s'il n'existe pas)\n await fs.mk