Lese- und Schreibvorgänge für Dateien
Die Tailwind Traders-Anwendung muss die Verkaufsdaten der einzelnen Filialen lesen, dann die Gesamtsumme berechnen und anschließend die Gesamtsumme aller einzelnen Filialverkaufsdateien in eine neue Datei schreiben.
Lesen von Daten aus Dateien mit fs.readFile
Dateien werden mithilfe der readFile
-Methode des fs-Moduls gelesen.
await fs.readFile("stores/201/sales.json");
Das von der readFile
-Methode zurückgegebene Objekt ist ein Buffer
-Objekt. Sie enthält den Inhalt der Datei im Binärformat. Wenn Sie beispielsweise an, dass Sie eine Datei namens sales.json mit folgendem Inhalt besitzen.
{
"total": 22385.32
}
Die Protokollierung des Rückgabewerts der readFile
-Methode würde den Wert Buffer
zurückgeben.
<Buffer 7b 0a 20 20 22 74 6f 74 61 6c 22 3a 20 32 32 33 38 35 2e 33 32 0a 7d>
Dieses Ergebnis ist nicht hilfreich. Die Datei wurde dann zwar möglicherweise gelesen, aber sie ist definitiv nicht lesbar. Das ist jedoch kein Problem. JavaScript kann einen Buffer
-Wert in einen Zeichenfolgenwert konvertieren, den Sie zum Berechnen der Gesamtsumme verwenden können. Rufen Sie dazu das String
-Objekt auf, und übergeben Sie den Puffer.
const bufferData = await fs.readFile("stores/201/sales.json");
console.log(String(bufferData));
Die Ausgabe lautet:
{
"total": 22385.32
}
Parsen von Daten mit JSON.parse
Diese Daten im Zeichenfolgenformat sind für Sie nicht von Nutzen. Sie bestehen weiterhin nur aus Zeichen, doch immerhin ist das Format lesbar. Sie möchten die Möglichkeit haben, diese Zeichenfolge in programmgesteuert zugängliche Daten umzuwandeln (bekannt als Parsen-Daten).
JavaScript schließt einen integrierten Parser für JSON-Dateien ein. Für seine Verwendung muss nichts eingeschlossen werden. Verwenden Sie einfach nur das JSON
-Objekt. Darüber hinaus müssen Sie vor der Verarbeitung keinen Buffer
-Wert in eine Zeichenfolge konvertieren. Die JSON.parse
-Methode übernimmt diese Aufgabe. JSON.parse ist eine gängige Methode, die Sie häufig in der Webentwicklung verwenden werden, wenn eine API Daten (als Zeichenfolgen) über das Internet empfängt, die dann in JSON-Objekte umgewandelt werden müssen.
// read the file as string
const fileContents = await fs.readFile("stores/201/sales.json");
// turn string into JSON
const data = JSON.parse(fileContents);
// access the value by the property key `total`
console.log(data.total);
Die Ausgabe lautet:
22385.32
Tipp
Dateien können die unterschiedlichsten Formate aufweisen. Eine JSON-Datei wäre das ideale Format, da es von der Programmiersprache unterstützt wird. Möglicherweise haben Sie es jedoch mit Dateien im CSV-Format, Dateien mit fester Breite oder Dateien in einem anderen Format zu tun. In diesem Fall ist es am besten, auf npmjs.org nach einem Parser für den jeweiligen Dateityp zu suchen.
Schreiben von Daten in Dateien mit fs.writeFile
In der vorherigen Übung haben Sie gelernt, Dateien zu schreiben. Hier wurde einfach nur eine leere Datei geschrieben. Wenn Sie nun Daten in eine Datei schreiben möchten, können Sie dieselbe writeFile
-Methode verwenden, übergeben jedoch als dritten Parameter die Daten, die geschrieben werden sollen.
// read the file as string
const fileContents = await fs.readFile("stores/201/sales.json");
// turn string into JSON
const data = JSON.parse(fileContents);
// file name is totals.txt
const filePath = path.join("salesTotals","totals.txt");
// write the total to the "totals.json" file
await fs.writeFile(filePath, data.total);
Die Inhalte der totals.txt
-Datei sind:
22385.32
Anfügen von Daten an Dateien mit fs.writeFile
Im vorherigen Beispiel wird die Datei jedes Mal überschrieben, wenn Sie Schreibvorgänge für sie ausführen. Manchmal möchten Sie Daten an die Datei anhängen, anstatt sie vollständig zu ersetzen. Sie können Daten anfügen, indem Sie ein Flag an die Methode writeFile
übergeben. Standardmäßig ist das Flag auf w
festgelegt, was Datei ersetzen bedeutet. Wenn Sie stattdessen einen Anfügevorgang für die Datei ausführen möchten, übergeben Sie das Flag a
, was anfügen bedeutet.
// read the file as string
const fileContents = await fs.readFile("stores/201/sales.json");
// turn string into JSON
const data = JSON.parse(fileContents);
// file name is totals.txt
const filePath = path.join("salesTotals","totals.txt");
// write the total to the "totals.json" file
await fs.writeFile(filePath, `${data.total}\r\n`, {flag: "a"});
Die Inhalte der totals.txt
-Datei sind:
22385.32
Tipp
Im obigen Codebeispiel weist \r\n
JavaScript an, den Wert in eine eigene Zeile zu schreiben. Wenn Sie diesen Wert (auch als Wagenrücklauf und Zeilenvorschub bekannt) nicht übergeben hätten, würden alle Zahlen hintereinander in derselben Zeile angezeigt werden.
In der nächsten Übung schließen Sie das Projekt der Umsatzgesamtzahlen für Tailwind Traders ab, indem Sie alle Dateien mit Umsatzzahlen lesen und das Gesamtergebnis in eine TXT-Datei schreiben. Diese Datei kann dann vom Finanzsystem des Unternehmens verarbeitet werden.