Module fs de Node.js
Le module fs (système de fichiers) est un module intégré de base dans Node.js, utilisé pour interagir avec le système de fichiers.
Le module fs fournit une série de méthodes pour gérer les opérations sur les fichiers telles que la lecture, l'écriture et la suppression.
Le module fs est l'un des modules les plus couramment utilisés dans le développement Node.js, en particulier dans les scénarios où des fichiers locaux doivent être traités.
Comment utiliser le module fs ?
Pour utiliser le module fs, vous devez d'abord l'importer :
À partir de Node.js 14, vous pouvez également utiliser la syntaxe d'import ES6 :
Exemple
// ou
import fs from 'fs'; // méthode ES Module
Principales méthodes du module fs
1. Lecture de fichier
Lire un fichier de manière synchrone (readFileSync)
Exemple
console.log(data);
'example.txt': le chemin du fichier à lire'utf8': spécifier le format d'encodage (facultatif)- Les méthodes synchrones bloquent l'exécution du code jusqu'à ce que la lecture du fichier soit terminée
Lire un fichier de manière asynchrone (readFile)
Exemple
if (err) throw err;
console.log(data);
});
- Les méthodes asynchrones ne bloquent pas l'exécution du code
- Gérer les résultats via des fonctions de rappel
- Le callback error-first est un modèle courant dans Node.js
2. Écriture de fichier
Écrire un fichier de manière synchrone (writeFileSync)
Exemple
Écrire un fichier de manière asynchrone (writeFile)
Exemple
if (err) throw err;
console.log('Fichier enregistré');
});
3. Ajout à un fichier
Ajout synchrone (appendFileSync)
Exemple
Ajout asynchrone (appendFile)
Exemple
if (err) throw err;
});
4. Vérification de l'état du fichier (stat)
Exemple
if (err) throw err;
console.log(`Taille du fichier: ${stats.size} bytes`);
console.log(`Date de création: ${stats.birthtime}`);
console.log(`S'il s'agit d'un fichier: ${stats.isFile()}`);
console.log(`S'il s'agit d'un répertoire: ${stats.isDirectory()}`);
});
5. Suppression de fichier
Supprimer de manière synchrone (unlinkSync)
Exemple
Supprimer de manière asynchrone (unlink)
Exemple
if (err) throw err;
console.log('Fichier supprimé');
});
Prise en charge de Promise et async/await
Node.js 10+ fournit le module fs/promises, qui prend en charge les API de style Promise :
Exemple
async function readFile() {
try {
const data = await fs.readFile('example.txt', 'utf8');
console.log(data);
} catch (err) {
console.error('Erreur de lecture du fichier :', err);
}
}
readFile();
Opérations de fichier basées sur les flux
Pour les fichiers volumineux, l'utilisation de flux peut améliorer les performances :
Flux de lecture
Exemple
readStream.on('data', (chunk) => {
console.log('Données reçues :', chunk.length);
});
readStream.on('end', () => {
console.log('Lecture terminée');
});
readStream.on('error', (err) => {
console.error('Erreur de lecture :', err);
});
Flux d'écriture
Exemple
writeStream.write('Première ligne de données\n');
writeStream.write('Deuxième ligne de données\n');
writeStream.end('Dernière ligne de données');
writeStream.on('finish', () => {
console.log('Écriture terminée');
});
writeStream.on('error', (err) => {
console.error('Erreur d’écriture :', err);
});
Opérations sur les répertoires
Créer un répertoire
Exemple
if (err) throw err;
console.log('Répertoire créé');
});
Lire le contenu du répertoire
Exemple
if (err) throw err;
console.log('Contenu du répertoire actuel :', files);
});
Supprimer le répertoire
Exemple
if (err) throw err;
console.log('Répertoire supprimé');
});
Bonnes pratiques
- Préférez utiliser des méthodes asynchrones: évitez de bloquer la boucle d'événements
- Gestion des erreurs: gérez toujours les erreurs possibles
- Utilisez des flux pour traiter les fichiers volumineux: améliorez les performances
- Gestion des chemins: utilisez le module path pour gérer les problèmes de chemins multiplateformes
- Vérification des permissions: vérifiez les permissions de fichier/répertoire avant les opérations
Exemples d'applications pratiques
Fonctionnalité de copie de fichiers
Exemple
function copyFile(source, target, cb) {
const readStream = fs.createReadStream(source);
const writeStream = fs.createWriteStream(target);
readStream.on('error', cb);
writeStream.on('error', cb);
readStream.on('close', () => {
writeStream.end();
cb(null);
});
readStream.pipe(writeStream);
}
copyFile('source.txt', 'target.txt', (err) => {
if (err) return console.error('Échec de la copie :', err);
console.log('Fichier copié avec succès');
});
Autres extensions
Modules intégrés de Node.js