Kodokon kodokon.com

Le système de fichiers : lire et écrire avec fs/promises

Vous lisez et écrivez des fichiers avec le module fs/promises et construisez des chemins fiables grâce au module path.

8 min · 3 questions

Ouvrir cette leçon dans Kodokon

Dans le navigateur, JavaScript n'a pas le droit de toucher aux fichiers de votre disque : question de sécurité. Node, lui, tourne directement sur votre machine et peut lire et écrire des fichiers grâce au module fs (file system, « système de fichiers »). Nous utiliserons sa version moderne, fs/promises, dont chaque fonction renvoie une promesse - vous savez déjà les attendre avec await, vu dans le parcours JavaScript. Remarquez le préfixe node: dans les imports : il précise que le module vient de Node lui-même, pas de node_modules. Et bonne nouvelle : dans un module ES, await fonctionne directement au niveau du fichier, sans fonction englobante.

JAVASCRIPT
import { writeFile } from "node:fs/promises";

await writeFile("notes.txt", "Première note\n");
console.log("Fichier créé !");
writeFile crée le fichier notes.txt s'il n'existe pas, avec le texte donné en second paramètre.

Pour lire, même logique avec readFile. Son second paramètre est essentiel : utf8 désigne l'encodage, c'est-à-dire la manière de traduire les octets stockés sur le disque en texte lisible. Si vous l'omettez, Node renvoie un objet Buffer - des octets bruts - au lieu d'une chaîne de caractères.

JAVASCRIPT
import { readFile } from "node:fs/promises";

const text = await readFile("notes.txt", "utf8");
console.log(text);
Le contenu du fichier arrive sous forme de chaîne de caractères, prête à être manipulée.

Parlons chemins. Un chemin relatif (notes.txt, data/log.txt) part du dossier courant ; un chemin absolu (C:\... ou /home/...) part de la racine du disque. Piège classique : Windows sépare les dossiers avec \, macOS et Linux avec /. Le module path règle le problème : path.join assemble les morceaux avec le bon séparateur, quel que soit le système. Combinons-le avec mkdir, qui crée un dossier.

JAVASCRIPT
import path from "node:path";
import { mkdir, writeFile } from "node:fs/promises";

const file = path.join("data", "log.txt");

await mkdir("data", { recursive: true });
await writeFile(file, "Premier journal\n");
console.log("Écrit dans :", file);
L'option recursive évite une erreur si le dossier data existe déjà.

Quiz de validation

Vérifiez que vous avez bien retenu les points clés de cette leçon.

  1. Que renvoie readFile si vous omettez le second paramètre utf8 ?
    • Une chaîne de caractères vide
    • Une erreur : l'encodage est obligatoire
    • Un Buffer, c'est-à-dire les octets bruts du fichier
  2. Que fait writeFile si le fichier visé existe déjà ?
    • Il remplace tout le contenu existant par le nouveau texte
    • Il ajoute le nouveau texte à la fin du fichier
    • Il refuse d'écrire et lève une erreur
    • Il crée automatiquement une copie de sauvegarde
  3. Quel est l'intérêt de path.join pour construire un chemin ?
    • Il crée les dossiers manquants du chemin
    • Il assemble les morceaux avec le bon séparateur selon le système
    • Il vérifie que le fichier existe avant de continuer