Exercício – criar arquivos e diretórios

Concluído

Como um desenvolvedor na Tailwind Traders, você criou um aplicativo de linha de comando robusto no Node.js que pode ler qualquer estrutura de pastas para localizar arquivos com uma extensão .json. Você precisará ler esses arquivos para resumir os dados e, depois, gravar os totais em um novo arquivo em um novo diretório chamado salesTotals.

Criar o diretório salesTotals

  1. Na função main, adicione código a:

    • (1) Crie uma variável chamada salesTotalsDir, que contém o caminho do diretório salesTotals.
    • (2) Crie o diretório se ele ainda não existir.
    • (3) Grave o total no arquivo "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. No prompt do terminal, execute o programa executando o código a seguir.

    node index.js
    
  3. Pressione o ícone Atualizar no Explorador de Arquivos para ver o novo arquivo. Você criou o arquivo, mas ele ainda não tem os totais. A próxima etapa é ler os arquivos de vendas, somar os totais e gravar o total geral no novo arquivo totals.txt. Em seguida, você aprende a ler e analisar dados dentro de arquivos.

Ficou preso?

Se você ficou preso durante este exercício, este é o código completo até este ponto.

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();