Lire et écrire des fichiers

Voir la vidéo
Description Sommaire

Dans ce premier chapitre consacré à NodeJS nous allons voir comment lire et écrire des fichiers.

Support de import EcmaScript

Par défaut, les version actuelles de NodeJS n'utilisent pas par défaut le système d'import d'EcmaScript et ne comprendront pas la syntaxe avec import. Pour forcer ce support vous avez 2 possibilités.

  • Changer l'extension de vos fichier pour utiliser .mjs
  • Ajouter une propriété "type": "module"dans votre package.json (vous pouvez générer ce fichier à l'aide de la commande npm init)

Les modules NodeJS

Pour importer les modules propre à NodeJS on utilisera le nom du module préfixé par node:.

import fs from 'node:fs'

const content = fs.readFileSync('demo.txt')

On aura aussi la possibilité de n'importer que la méthodes qui nous intérèsse.

import { readFileSync } from 'node:fs'

const content = readFileSync('demo.txt')

Synchrone ou Asynchrone

La plupart des méthodes liées aux fichiers disposent de 3 versions

  • fs.<nom>Sync permet de faire une opération de manière synchrone (en bloquant votre script)
  • fs.<nom> permet de faire une opération de manière asynchrone en utilisant un callback en paramètre.
  • fsPromises.<nom> permet de faire une opération de manière asynchrone en renvoyant une promesse.

En général, on aura tendance à utiliser la version avec les promesses vu qu'elle offre la forme la plus moderne. Par exemple pour lire un fichier on utilisera la méthode de cette manière.

import { readFile } from 'node:fs/promises';

try {
  const content = await readFile(fileName, { encoding: 'utf8 });
} catch (err) {
  console.error("Impossible de lire le fichier " + err);
}

Méthodes utiles

Pour découvrir les différentes méthodes vous pouvez parcourir la documentation sur le système de fichier mais je vous propose une sélection des méthodes les plus utiles.

  • readFile permet de lire un fichier (utiliser l'option encoding pour obtenir une chaîne de caractère).
  • writeFile permet d'écrire dans un fichier (utiliser l'option flag en fonction de ce que vous voulez faire).
  • copyFile
  • rename
  • rm permet de supprimer un fichier.
  • readdir permet de lire le contenu d'un dossier
  • stat permet d'obtenir des informations sur un fichier (taille, date de création, date de modification...)

Attention au chemin

Attention, si les chemins que vous passez à ces différentes méthodes sont relatif ils seront résolus par rapport au dossier dans lequel vous éxécutez le script NodeJS (et non pas relativement au fichier JavaScript dans lequel se trouve le code). Si vous voulez récupérer le chemin du fichier courant vous pouvez utiliser import.meta.url

import { fileURLToPath } from 'node:url'
import { dirname, join } from 'node:path'

const directory = dirname(fileURLToPath(import.meta.url))
const content = readFile(join(directory, 'demo.txt'))
console.log(content)

Lecture et écriture plus fine

Pour des opération plus fine sur les fichier il est possible d'utiliser les méthode write et read qu'il faudra utiliser sur un fichier préalablement ouvert.

import {open} from 'node:fs/promises'

const fileHandle = await open('hello.txt', 'a+')
try {
    fileHandle.write('Bonjour')
    const firstLetters = await fileHandle.read({position: 4, length: 3})
    console.log(firstLetters.buffer.toString('utf8')) // our
} finally {
    fileHandle.close() // On ferme le fichier quand on a finit de travailler
}
Publié
Technologies utilisées
Auteur :
Grafikart
Partager