Übung: Erstellen von Dateien und Verzeichnissen
Als Entwickler*in bei Tailwind Traders haben Sie eine stabile Befehlszeilenanwendung in Node.js erstellt, die eine beliebige Ordnerstruktur lesen kann, um nach Dateien mit einer JSON-Erweiterung zu suchen. Sie müssen diese Dateien lesen, um die darin befindlichen Daten zusammenfassen und dann die Gesamtwerte in eine neue Datei in einem neuen Verzeichnis namens salesTotals schreiben.
Erstellen des Verzeichnisses „salesTotals“
Fügen Sie in der
main
-Funktion folgenden Code hinzu:- (1) Erstellen Sie eine Variable namens
salesTotalsDir
, die den Pfad des Verzeichnisses salesTotals enthält. - (2) Erstellen Sie das Verzeichnis, wenn es noch nicht vorhanden ist.
- (3) Schreiben Sie das Gesamtergebnis in die Datei „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}`); }
- (1) Erstellen Sie eine Variable namens
Führen Sie das Programm an der Eingabeaufforderung des Terminals mithilfe des folgenden Codes aus.
node index.js
Wählen Sie im Datei-Explorer das Symbol Aktualisieren aus, um die neue Datei anzuzeigen. Sie haben die Datei erstellt, aber sie verfügt noch nicht über die Gesamtsummen. Der nächste Schritt besteht darin, die Umsatzdateien zu lesen, die Summen zu berechnen und die Gesamtsumme in die neue Datei totals.txt zu schreiben. Als Nächstes erfahren Sie, wie Sie Daten in Dateien lesen und analysieren.
Wissen Sie nicht weiter?
Wenn Sie während dieser Übung Probleme haben, finden Sie hier den vollständigen Code bis zum jetzigen Zeitpunkt.
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();