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 !

Node.js - File System

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