L'écosystème Node.js met à disposition des modules intégrés puissants pour interagir avec le système de fichiers. Parmi eux, les modules fs (File System) et path sont fondamentaux pour la gestion des opérations liées aux fichiers et aux structures de répertoire.
Le module fs pour les opérations sur les fichiers
Le module fs offre une interface synchrone et asynchrone pour une variété de tâches liées aux fichiers, telles que la lecture, l'écriture, la copie, la suppression et le renommage. Pour l'utiliser, il faut d'abord l'importer :
const fs = require('fs');
Voici quelques fonctions courantes du module fs :
fs.stat()etfs.statSync(): Obtenir des informations sur un fichier ou un répertoire Ces méthodes retournent un objetStatscontenant des informations sur le fichier, notamment s'il s'agit d'un fichier (isFile()) ou d'un répertoire (isDirectory()).
fs.stat('./mon_repertoire', (err, stats) => {
if (err) {
console.error('Erreur lors de la récupération des stats:', err);
return;
}
console.log(`Est un fichier : ${stats.isFile()}`);
console.log(`Est un répertoire : ${stats.isDirectory()}`);
});
fs.mkdir()etfs.mkdirSync(): Créer un répertoire Permet de créer un nouveau répertoire.
fs.mkdir('./nouveau_dossier', (err) => {
if (err) {
console.error("Échec de la création du répertoire:", err);
return;
}
console.log("Répertoire créé avec succès.");
});
fs.writeFile()etfs.writeFileSync(): Écrire dans un fichier Cette fonction crée un fichier s'il n'existe pas, ou écrase son contenu s'il existe. Elle prend en paramètres le chemin du fichier, les données à écrire et une fonctoin de rappel.
fs.writeFile('./mon_fichier.txt', 'Contenu initial.', (err) => {
if (err) {
console.error("Erreur lors de l'écriture du fichier:", err);
return;
}
console.log("Écriture réussie.");
});
fs.appendFile()etfs.appendFileSync(): Ajouter du contenu à un fichier Similaire àwriteFile, mais ajoute les données à la fin du fichier existant.
fs.appendFile('./mon_fichier.txt', '\nAjout de texte.', (err) => {
if (err) {
console.error("Erreur lors de l'ajout au fichier:", err);
return;
}
console.log("Ajout réussi.");
});
fs.readFile()etfs.readFileSync(): Lire le contenu d'un fichier Lit le contenu d'un fichier. Les données sont renvoyées sous forme de buffer par défaut.
fs.readFile('./mon_fichier.txt', (err, data) => {
if (err) {
console.error("Erreur lors de la lecture du fichier:", err);
return;
}
console.log("Contenu brut (buffer) :", data);
console.log("Contenu (string) :", data.toString('utf8'));
});
fs.readdir()etfs.readdirSync(): Lire le contenu d'un répertoire Liste les fichiers et sous-répertoires d'un répertoire donné.fs.rename()etfs.renameSync(): Renommer ou déplacer un fichier/répertoire Permet de modifier le nom d'un fichier ou répertoire, ou de le déplacer vers un nouvel emplacement.
fs.rename('./mon_fichier.txt', './nouveau_nom.txt', (err) => {
if (err) {
console.error("Échec du renommage:", err);
return;
}
console.log("Renommage réussi.");
});
fs.rmdir()etfs.rmdirSync(): Supprimer un répertoire Supprime un répertoire vide. Pour supprimer un répertoire non vide,fs.rm()(disponible dans les versions récentes de Node.js) ou des modules tiers peuvent être nécessaires.fs.unlink()etfs.unlinkSync(): Supprimer un fichier Supprime un fichier.fs.createReadStream()etfs.createWriteStream(): Lecture et écriture via des flux (Streams) Ces méthodes sont idéales pour manipuler de grands fichiers, car elles traitent les données par morceaux (chunks) plutôt que de charger l'intégralité du fichier en mémoire.
Le module path pour la manipulation des chemins
Le module path fournit des utilitaires pour travailler avec les chemins de fichiers de manière indépendante de la plateforme. Il gère les différences entre les systèmes d'exploitation (comme le séparateur de répertoire : / sur Unix/macOS, \ sur Windows).
const path = require('path');
Fonctions clés du module path :
| Méthode | Description | Exemple |
|---|---|---|
path.normalize(p) |
Normalise un chemin, résolvant les '..' et '.' et supprimant les caractères redondants. | path.normalize('/foo/bar//baz/./quux') retourne '/foo/bar/baz/quux' |
path.join([...paths]) |
Joint tous les segments de chemin fournis en un seul chemin. Utilise le séparateur de répertoire approprié à la plateforme. | path.join('/foo', 'bar', 'baz') retourne '/foo/bar/baz' (sur Unix) ou '\\foo\\bar\\baz' (sur Windows). |
path.resolve([...paths]) |
Résout un chemin en un chemin absolu. Les segments sont traités de droite à gauche jusqu'à ce qu'un chemin absolu soit formé. | path.resolve('/foo', 'bar', '../baz') retourne '/foo/baz'. |
path.isAbsolute(path) |
Détermine si un chemin est absolu. | path.isAbsolute('/foo/bar') retourne true. path.isAbsolute('foo/bar') reoturne false. |
path.relative(from, to) |
Calcule le chemin relatif de from à to. |
path.relative('/a/b/c', '/a/d/e') retourne '../../d/e'. |
path.dirname(p) |
Retourne le nom du répertoire d'un chemin. | path.dirname('/a/b/c.txt') retourne '/a/b'. |
path.basename(p[, ext]) |
Retourne le nom du fichier ou du dernier segment d'un chemin. L'extension optionnelle ext sera retirée si présente. |
path.basename('/a/b/c.txt') retourne 'c.txt'. path.basename('/a/b/c.txt', '.txt') retourne 'c'. |
path.extname(p) |
Retourne l'extension du chemin (la partie après le dernier '.'). | path.extname('archive.tar.gz') retourne '.gz'. path.extname('index.html') retourne '.html'. |
path.parse(pathString) |
Analyse un chemin et retourne un objet avec ses composants (root, dir, base, ext, name). | path.parse('/home/user/file.txt') retourne { root: '/', dir: '/home/user', base: 'file.txt', ext: '.txt', name: 'file' }. |
path.format(pathObject) |
Crée une chaîne de chemin à partir d'un objet de composants (l'inverse de path.parse). |
path.format({ dir: '/home/user', name: 'file', ext: '.txt' }) retourne '/home/user/file.txt'. |