Exercice - Créer des fichiers et des répertoires

Effectué

En votre qualité de développeur Tailwind Traders, vous avez créé une application de ligne de commande robuste dans Node.js qui peut lire n’importe quelle structure de dossiers pour y rechercher les fichiers avec l’extension .json. Vous devez lire ces fichiers pour totaliser les données qu’ils contiennent, puis écrire les totaux dans un nouveau fichier dans un nouveau répertoire appelé salesTotals.

Créer le répertoire salesTotals

  1. Dans la fonction main, ajouter du code à :

    • (1) Créez une variable appelée salesTotalsDir qui contient le chemin du répertoire salesTotals.
    • (2) S’il n’existe pas déjà, créez ce répertoire.
    • (3) Écrivez le total dans le fichier « totals.txt ».
     async function main() {
       const salesDir = path.join(__dirname, "stores");
    
       // (1) Create a variable called `salesTotalsDir`, which holds the path of the *salesTotals* directory.
       const salesTotalsDir = path.join(__dirname, "salesTotals");
    
       try {
         // (2) Create the directory if it doesn't already exist.
         await fs.mkdir(salesTotalsDir);
       } catch {
         console.log(`${salesTotalsDir} already exists.`);
       }
    
       // Calculate sales totals
       const salesFiles = await findSalesFiles(salesDir);
    
       // (3) Write the total to the "totals.txt" file with empty string `String()`
       await fs.writeFile(path.join(salesTotalsDir, "totals.txt"), String());
       console.log(`Wrote sales totals to ${salesTotalsDir}`);
     }
    
  2. À l’invite du terminal, exécutez le programme avec le code suivant.

    node index.js
    
  3. Sélectionnez l’icône Actualiser dans l’Explorateur de fichiers pour voir le nouveau fichier. Vous avez créé le fichier, mais il n’a pas encore les totaux. La dernière étape consiste à lire les fichiers de ventes, additionner les totaux et écrire le total général dans le nouveau fichier totals.txt. Vous allez ensuite découvrir comment lire et analyser les données incluses dans les fichiers.

Vous êtes bloqué ?

Si vous êtes bloqué pendant cet exercice, voici le code complet utilisé jusqu’ici.

const fs = require("fs").promises;
const path = require("path");

async function findSalesFiles(folderName) {

  // (1) Add an array at the top, to hold the paths to all the sales files that the program finds.
  let results = [];

  // (2) Read the currentFolder with the `readdir` method. 
  const items = await fs.readdir(folderName, { withFileTypes: true });

  // (3) Add a block to loop over each item returned from the `readdir` function using the asynchronous `for...of` loop. 
  for (const item of items) {

    // (4) Add an `if` statement to determine if the item is a file or a directory. 
    if (item.isDirectory()) {

      // (5) If the item is a directory,  recursively call the function `findSalesFiles` again, passing in the path to the item. 
      const resultsReturned = await findSalesFiles(path.join(folderName, item.name));
      results = results.concat(resultsReturned);
    } else {
      // (6) If it's not a directory, add a check to make sure the item name matches *sales.json*.
      if (path.extname(item.name) === ".json")
        results.push(`${folderName}/${item.name}`);
    }
  }


  return results;
}

async function main() {
  const salesDir = path.join(__dirname, "stores");

  // (1) Create a variable called `salesTotalsDir`, which holds the path of the *salesTotals* directory.
  const salesTotalsDir = path.join(__dirname, "salesTotals");

  try {
    // (2) Create the directory if it doesn't already exist.
    await fs.mkdir(salesTotalsDir);
  } catch {
    console.log(`${salesTotalsDir} already exists.`);
  }

  // Calculate sales totals
  const salesFiles = await findSalesFiles(salesDir);

  // (3) Write the total to the "totals.txt" file with empty string `String()`
  await fs.writeFile(path.join(salesTotalsDir, "totals.txt"), String());
  console.log(`Wrote sales totals to ${salesTotalsDir}`);
}

main();