Dans node, le module fs fait référence au « module de système de fichiers », qui est un module utilisé pour faire fonctionner les fichiers. La plupart des API du module fs proposent trois méthodes de fonctionnement : 1. Opération de fichier synchrone : le code sera bloqué et ne continuera pas à s'exécuter ; 2. Fichier d'opération de fonction de rappel asynchrone : le code ne sera pas bloqué et une fonction de rappel doit être transmis. Lorsque le résultat est généré, la fonction de rappel est exécutée ; 3. Fichier d'opération de promesse asynchrone : le code ne sera pas bloqué et une promesse sera renvoyée en appelant l'opération de méthode via fs.promises.
L'environnement d'exploitation de ce tutoriel : système Windows 7, nodejs version 16, ordinateur DELL G3.
Le module du système de fichiers (fs en abrégé) nous permet d'accéder et d'interagir avec le système de fichiers de notre ordinateur.
Le module fs est un module officiellement fourni par Node.js pour l'exploitation des fichiers. Il fournit une série de méthodes et de propriétés pour répondre aux besoins d'exploitation des fichiers des utilisateurs.
Méthode fs.readFile(), utilisée pour lire le contenu du fichier spécifié
Méthode fs.writeFile(), utilisée pour écrire du contenu dans le fichier spécifié si vous souhaitez l'utiliser dans du code JavaScript
Le module de système de fichiers est un module central de Node.js. Cela signifie que nous n'avons pas besoin de l'installer. La seule chose que nous devons faire est d'importer le module fs dans son propre fichier.
Donc en haut du fichier ajoutez :
const fs = exiger('fs')Nous pouvons désormais appeler n'importe quelle méthode du module du système de fichiers en utilisant le préfixe fs.
Alternativement, nous pouvons simplement importer les méthodes requises depuis l'API fs comme suit :
const { writeFile, readFile } = require('fs')Remarque : Pour plus de commodité, nous devons également importer le module path. Il s'agit d'un autre module principal de Node.js qui nous permet de travailler avec des chemins de fichiers et de répertoires.
Après avoir importé le module fs, ajoutez :
const chemin = require('chemin')Lors de l'utilisation du module de système de fichiers, le module de chemin n'est pas requis. Mais ça nous aide beaucoup !
Les opérations sur les fichiers du module fs prennent généralement en charge deux API : synchrone et asynchrone : elles incluent également des fonctions de rappel et des formulaires Promsie. La synchronisation est généralement suivie du mot sync.
La plupart des API du module fs proposent trois méthodes de fonctionnement :
Fonctionnement synchrone des fichiers : le code sera bloqué et ne continuera pas à s'exécuter
Fichier d'opération de fonction de rappel asynchrone : le code ne sera pas bloqué, la fonction de rappel doit être transmise et lorsque le résultat est obtenu, la fonction de rappel est exécutée
Fichiers d'opération de promesse asynchrone : le code ne sera pas bloqué. L'appel des opérations de méthode via fs.promises renverra une promesse, qui pourra ensuite être traitée et interceptée.
Notez que toutes les méthodes fs sont asynchrones par défaut. Cependant, on peut utiliser la version synchronisée en ajoutant Sync à la fin de la méthode.
Par exemple, la version synchrone de la méthode writeFile est writeFileSync. Les méthodes synchrones complètent le code de manière synchrone, elles bloquent donc le thread principal. Bloquer le thread principal dans Node.js est considéré comme une mauvaise pratique et nous ne devrions pas le faire.
Par conséquent, ci-dessous, nous utiliserons les méthodes asynchrones dans le module du système de fichiers.
Pour écrire dans un fichier à partir d'une application Node.js, utilisez la méthode writeFile.
La méthode writeFile accepte au moins les paramètres suivants :
Rappel du contenu du nom de fichierSi le fichier spécifié existe déjà, il remplace l'ancien contenu par le contenu que vous fournissez en argument. Si le fichier spécifié n'existe pas, un nouveau fichier est créé.
Après avoir importé les modules fs et path, écrivez le code suivant dans le fichier :
fs.writeFile('content.txt', 'Tout travail et aucun jeu font de Jack un garçon ennuyeux !', err => { if (err) throw err process.stdout.write('Créé avec succès !')})Le code ci-dessus créera un nouveau fichier nommé content.txt et ajoutera le texte Tout travail et aucun jeu font de Jack un garçon ennuyeux en tant que contenu ! S'il y a des erreurs, la fonction de rappel générera cette erreur. Sinon, la console indiquera que le fichier a été créé avec succès.
Il existe d'autres variantes de writeFile, telles que :
fs.writeFileSync — Écrivez des fichiers de manière synchrone fsPromises.writeFile — Écrivez des fichiers à l'aide de l'API basée sur PromiseDécouvrez l'essentiel : https://gist.github.com/catalinpit/571ba06c06214b5c8744036c6500af92
Avant de lire un fichier, le chemin d'accès au fichier doit être créé et stocké. Le chemin du module path est pratique ici.
En utilisant la méthode path du module join, vous pouvez créer un chemin de fichier comme suit :
const filePath = chemin.join(process.cwd(), 'content.txt')Le premier paramètre process.cwd() renvoie le répertoire de travail actuel. Maintenant que vous connaissez le chemin du fichier, vous pouvez lire le contenu du fichier.
Écrivez le code suivant dans le fichier :
fs.readFile(filePath, (error, content) => { if (error) throw error process.stdout.write(content)})La méthode readFile accepte au moins deux paramètres :
Rappel du chemin du fichierS'il y a une erreur, une erreur sera générée. Sinon, il imprime le contenu du fichier dans le terminal.
Il existe d'autres variantes de readFile, telles que :
fs.readFileSync — Écrivez dans un fichier de manière synchrone fsPromises.readFile — Écrivez dans un fichier à l'aide d'une API basée sur PromiseDécouvrez l'essentiel : https://gist.github.com/catalinpit/badc2a539a44412892a0e05a9575d54d
Afficher un fichier dans un répertoire est très similaire à la lecture du contenu du fichier. Cependant, au lieu de transmettre le chemin du fichier, transmettez le répertoire de travail actuel (nous pouvons transmettre n'importe quel autre répertoire).
Ensuite, transmettez une fonction de rappel pour gérer la réponse. Écrivez le code suivant dans le fichier :
fs.readdir(process.cwd(), (erreur, fichiers) => { if (erreur) renvoie une erreur console.log(files)})Jusqu'à présent, nous n'avons utilisé que process.stdout.write pour afficher du contenu sur le terminal. Cependant, vous pouvez simplement utiliser console.log, comme dans l'extrait de code ci-dessus.
Si nous exécutons l'application, nous devrions obtenir un tableau contenant tous les fichiers du répertoire.
Découvrez l'essentiel : https://gist.github.com/catalinpit/f82c4e6ae3acd5d97efdecb0bc67979e
Le module du système de fichiers dispose d'une méthode qui vous permet de supprimer des fichiers. Cependant, il est important de noter que cela ne fonctionne que pour les fichiers, pas pour les répertoires.
Lorsque la méthode unlink est appelée avec un chemin de fichier comme paramètre, elle supprime le fichier. Ajoutez l'extrait de code suivant au fichier :
fs.unlink(filePath, error => { if (error) throw error console.log('Le fichier a été supprimé !')})Si vous réexécutez le code, vos fichiers seront supprimés !
Découvrez l'essentiel : https://gist.github.com/catalinpit/b1201434218c400f77e042109bfce99e
Nous pouvons créer un répertoire de manière asynchrone en utilisant la méthode mkdir. Écrivez le code suivant dans le fichier :
fs.mkdir(`${process.cwd()}/myFolder/secondFolder`, { recursive: true }, (err) => { if (err) throw err console.log('Dossier créé avec succès !') })Tout d’abord, créez un nouveau dossier dans le répertoire de travail actuel. Comme mentionné précédemment, vous pouvez obtenir le répertoire de travail actuel à partir de l'objet processus en utilisant la méthode cwd().
Ensuite, transmettez le ou les dossiers à créer. Cependant, cela ne signifie pas que vous devez créer un nouveau dossier dans votre répertoire de travail actuel. Vous pouvez les créer n'importe où.
Désormais, le deuxième paramètre est l’option récursive. S'il n'est pas défini sur true, plusieurs dossiers ne peuvent pas être créés. Si l'option récursive est définie sur false, le code ci-dessus donnera une erreur. Essayez-le !
Cependant, si vous souhaitez uniquement créer un dossier, il n'est pas nécessaire de définir l'option récursive sur true.
Le code suivant fonctionne bien !
fs.mkdir(`${process.cwd()}/myFolder`, err => { if (err) throw err console.log('Dossier créé avec succès !')});Par conséquent, je voudrais souligner l’utilisation du récursif. Vous devez définir cette valeur sur true si vous souhaitez créer des dossiers dans des dossiers. Il créera tous les dossiers même s'ils n'existent pas.
En revanche, si vous souhaitez uniquement créer un dossier, vous pouvez le laisser faux.
Découvrez l'essentiel : https://gist.github.com/catalinpit/09bad802541102c0cce2a2e4c3985066
La logique de suppression d'un répertoire est similaire à la création d'un répertoire. Si vous regardez le code écrit pour créer le répertoire et le code ci-dessous, vous verrez des similitudes.
Écrivez donc le code suivant dans le fichier :
fs.rmdir(`${process.cwd()}/myFolder/`, { recursive: true }, err => { if (err) throw err console.log('Dossier supprimé avec succès !')})Utilisez la méthode rmdir du module système de fichiers et transmettez les paramètres suivants :
Répertoire à supprimer, rappel de propriété récursifSi la propriété récursive est définie sur true, elle supprime le dossier et son contenu. Il est important de noter que vous devez définir cette valeur sur true si le dossier contient du contenu. Sinon, vous obtiendrez une erreur.
L'extrait de code suivant ne fonctionne que lorsque le dossier est vide :
fs.rmdir(`${process.cwd()}/myFolder/`, err => { if (err) throw err console.log('Dossier supprimé avec succès !')})S'il y a d'autres fichiers et/ou dossiers dans myFolder, une erreur se produira si { recursive: true } n'est pas transmis.
Il est important de savoir quand utiliser l'option récursive et quand ne pas l'utiliser pour éviter les problèmes.
Découvrez l'essentiel : https://gist.github.com/catalinpit/a8cb6aca75cef8d6ac5043eae9ba22ce
À l'aide du module fs, vous pouvez renommer des répertoires et des fichiers. L'extrait de code suivant montre comment procéder à l'aide de la méthode rename.
// Renommer un répertoire fs.rename(`${process.cwd()}/myFolder/secondFolder`, `${process.cwd()}/myFolder/newFolder`, err => { if (err) throw err console .log('Rename rename!')});//Renommer un fichier fs.rename(`${process.cwd()}/content.txt`, `${process.cwd()}/newFile .txt` , err => { if (err) throw err console.log('Fichier renommé !')});La méthode rename contient trois paramètres :
Le premier paramètre est le dossier/fichier existant et le deuxième paramètre est le nouveau rappel de nomAinsi, pour renommer un fichier ou un répertoire, nous devons transmettre le nom du fichier/répertoire actuel et le nouveau nom. Après avoir exécuté l'application, les noms des répertoires/fichiers doivent être mis à jour.
Notez que si le nouveau chemin existe déjà (par exemple, un nouveau nom pour un fichier/dossier), il sera écrasé. Assurez-vous donc de ne pas écraser les fichiers/dossiers existants par erreur.
Découvrez l'essentiel : https://gist.github.com/catalinpit/5c3e7c6ae39d09996ff67175a719122e
Nous pouvons également ajouter du nouveau contenu à un fichier existant en utilisant la méthode appendFile.
Si l’on compare les deux méthodes writeFile et appendFile, on constate qu’elles sont similaires. Transmettez le chemin du fichier, le contenu et le rappel.
fs.appendFile(filePath, 'nTout travail et aucun jeu font de Jack un garçon ennuyeux !', err => { if (err) throw err console.log('Tout travail et aucun jeu font de Jack un garçon ennuyeux !')} )L'extrait de code ci-dessus montre comment ajouter du nouveau contenu à un fichier existant. Si vous exécutez l'application et ouvrez le fichier, vous devriez voir le nouveau contenu à l'intérieur.