Node.js - Système de fichiers
Bienvenue, futurs programmeurs ! Aujourd'hui, nous plongeons dans le monde passionnant de Node.js et de son module Système de fichiers. En tant que votre professeur d'informatique de quartier bienveillant, je suis là pour vous guider à travers ce périple avec plein d'exemples et d'explications. Alors, bouclez votre ceinture et c'est parti !
Synchrones vs Asynchrones
Avant de sauter dans le vif du sujet des opérations de fichiers, parlons de deux concepts importants : les opérations synchrones et asynchrones.
Imaginez que vous êtes dans un café. Dans un monde synchrone, vous commanderiez votre café, attendriez qu'il soit préparé, puis passeriez à la tâche suivante. Dans un monde asynchrone, vous commanderiez votre café, puis vous continueriez vos activités tandis que le barista le prépare.
En Node.js, nous avons à la fois des méthodes synchrones et asynchrones pour les opérations de fichiers. Jetons un œil à un exemple :
const fs = require('fs');
// Lecture synchrone
const data = fs.readFileSync('hello.txt', 'utf8');
console.log(data);
// Lecture asynchrone
fs.readFile('hello.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
Dans la version synchrone, notre programme attend que le fichier soit lu avant de continuer. Dans la version asynchrone, il continue l'exécution pendant que le fichier est lu, puis exécute une fonction de rappel une fois que c'est fait.
Écrire dans un fichier
Maintenant, apprenons comment écrire dans un fichier. C'est comme laisser un message pour votre futur vous !
const fs = require('fs');
// Écriture synchrone
fs.writeFileSync('note.txt', 'Bonjour, Futur Moi !');
// Écriture asynchrone
fs.writeFile('note.txt', 'Bonjour, Futur Moi !', (err) => {
if (err) throw err;
console.log('Fichier sauvegardé !');
});
Dans les deux cas, nous créons (ou écrasons) un fichier appelé 'note.txt' avec le contenu "Bonjour, Futur Moi !". La version asynchrone inclut une fonction de rappel qui s'exécute après que le fichier a été écrit.
Lire un fichier
Lire un fichier, c'est comme ouvrir le message que vous avez laissé pour vous-même. Voyons comment faire :
const fs = require('fs');
// Lecture synchrone
const data = fs.readFileSync('note.txt', 'utf8');
console.log(data);
// Lecture asynchrone
fs.readFile('note.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
Les deux méthodes afficheront le contenu de 'note.txt'. Le paramètre 'utf8' spécifie l'encodage du fichier.
Ouvrir un fichier
Parfois, nous voulons plus de contrôle sur la manière dont nous interagissons avec un fichier. C'est là que rentre en jeu la méthode open
:
const fs = require('fs');
// Ouverture asynchrone
fs.open('myfile.txt', 'r', (err, fd) => {
if (err) throw err;
console.log('Fichier ouvert avec succès !');
// N'oubliez pas de fermer le fichier lorsque vous avez terminé
fs.close(fd, (err) => {
if (err) throw err;
});
});
Cela ouvre 'myfile.txt' en mode lecture ('r'). Le fd
dans la fonction de rappel est un descripteur de fichier, que nous utiliserons pour d'autres opérations sur le fichier.
API Promesses
Pour ceux qui préfèrent travailler avec des Promesses (ne vous inquiétez pas si vous ne savez pas encore ce que c'est !), Node.js fournit une API basée sur les Promesses pour les opérations de fichiers :
const fs = require('fs').promises;
async function readMyFile() {
try {
const data = await fs.readFile('myfile.txt', 'utf8');
console.log(data);
} catch (error) {
console.error('Erreur de lecture du fichier:', error);
}
}
readMyFile();
Cela atteint le même résultat que notre exemple de readFile
asynchrone précédent, mais en utilisant la syntaxe JavaScript moderne.
Obtenir des informations sur un fichier
Curieux des informations sur un fichier ? Node.js a tout prévu :
const fs = require('fs');
fs.stat('myfile.txt', (err, stats) => {
if (err) throw err;
console.log(`Taille du fichier : ${stats.size} octets`);
console.log(`Est-ce un répertoire ? ${stats.isDirectory()}`);
console.log(`Est-ce un fichier ? ${stats.isFile()}`);
});
Cela nous donne des informations telles que la taille du fichier, s'il s'agit d'un répertoire ou d'un fichier, et plus encore.
Fermer un fichier
N'oubliez jamais de fermer vos fichiers lorsque vous avez terminé. C'est comme remettre le couvercle sur votre dentifrice !
const fs = require('fs');
fs.open('myfile.txt', 'r', (err, fd) => {
if (err) throw err;
// Effectuez certaines opérations...
fs.close(fd, (err) => {
if (err) throw err;
console.log('Fichier fermé avec succès');
});
});
Tronquer un fichier
Parfois, vous souhaitez conserver un fichier mais supprimer son contenu. C'est là que rentre en jeu la troncation :
const fs = require('fs');
fs.truncate('myfile.txt', 0, (err) => {
if (err) throw err;
console.log('Contenu du fichier effacé !');
});
Cela réduit le fichier à 0 octet, effektivment effaçant son contenu.
Supprimer un fichier
Lorsque vous ne voulez plus d'un fichier, vous pouvez le supprimer :
const fs = require('fs');
fs.unlink('myfile.txt', (err) => {
if (err) throw err;
console.log('Fichier supprimé avec succès');
});
Soyez prudent avec celui-ci - il n'y a pas de bouton "annuler" dans la vie réelle !
Créer un répertoire
Besoin d'un nouveau dossier ? Voici comment le faire :
const fs = require('fs');
fs.mkdir('mynewfolder', (err) => {
if (err) throw err;
console.log(' Répertoire créé avec succès !');
});
Lire un répertoire
Si vous souhaitez voir ce qu'il y a dans un répertoire, voici comment faire :
const fs = require('fs');
fs.readdir('.', (err, files) => {
if (err) throw err;
console.log('Contenu du répertoire :');
files.forEach(file => {
console.log(file);
});
});
Cela liste tous les fichiers et sous-répertoires du répertoire courant.
Supprimer un répertoire
Et enfin, si vous souhaitez supprimer un répertoire :
const fs = require('fs');
fs.rmdir('mynewfolder', (err) => {
if (err) throw err;
console.log(' Répertoire supprimé avec succès');
});
Notez que cela ne fonctionne que sur les répertoires vides.
Référence des méthodes
Voici un tableau pratique des méthodes que nous avons couvertes :
Méthode | Description |
---|---|
readFile | Lit l'intégralité du contenu d'un fichier |
writeFile | Écrit des données dans un fichier, remplaçant le fichier s'il existe déjà |
open | Ouvre un fichier pour la lecture ou l'écriture |
close | Ferme un descripteur de fichier |
stat | Obtient des informations sur un fichier |
truncate | Tronque un fichier à une longueur spécifiée |
unlink | Supprime un fichier |
mkdir | Crée un nouveau répertoire |
readdir | Lit le contenu d'un répertoire |
rmdir | Supprime un répertoire |
Et voilà ! Vous êtes maintenant équipé des bases des opérations de système de fichiers en Node.js. Souvenez-vous, la pratique rend parfait, donc n'ayez pas peur d'expérimenter avec ces méthodes. Bon codage !
Credits: Image by storyset