Lezen en schrijven naar bestanden

Voltooid

De Tailwind Traders-toepassing moet de verkoopgegevens van elke winkel lezen en vervolgens het totaal berekenen en vervolgens het totaal van alle afzonderlijke winkelverkoopbestanden naar een nieuw bestand schrijven.

Gegevens lezen uit bestanden met fs.readFile

Bestanden worden gelezen via de readFile-methode in de fs-module.

await fs.readFile("stores/201/sales.json");

Het object dat door de readFile-methode wordt geretourneerd, is een Buffer-object. Het bevat de inhoud van het bestand in binaire indeling. Stel bijvoorbeeld dat u een bestand met de naam sales.json met de volgende inhoud hebt.

{
  "total": 22385.32
}

Als u zich afmeldt, zou de retourneringswaarde van de readFile-methode u de Buffer-waarde geven.

<Buffer 7b 0a 20 20 22 74 6f 74 61 6c 22 3a 20 32 32 33 38 35 2e 33 32 0a 7d>

Dat resultaat is niet nuttig. U hebt het bestand misschien wel gelezen, maar u kunt deze gegevens zeker niet 'lezen'. Maar dat is prima. JavaScript kan een Buffer waarde converteren naar een tekenreekswaarde die u kunt gebruiken om het totaal te berekenen. Roep hiervoor het String-object aan en geef het door aan de buffer.

const bufferData = await fs.readFile("stores/201/sales.json");
console.log(String(bufferData));

De uitvoer is:

{
  "total": 22385.32
}

Gegevens parseren met JSON.parse

U hebt niet veel aan deze gegevens in hun tekenreeksindeling. Het zijn nog gewoon tekens, maar nu in een indeling die u kunt lezen. U wilt de mogelijkheid om deze tekenreeks om te zetten in programmatisch toegankelijke gegevens (ook wel parseringsgegevens genoemd).

JavaScript beschikt over een ingebouwde parseerfunctie voor json-bestanden. U hoeft niets in te voegen om deze functie te kunnen gebruiken. Gebruik gewoon het JSON-object. Bovendien hoeft u geen Buffer-waarde naar een tekenreeks om te zetten voordat u deze kunt parseren. Dit doet de JSON.parse-methode al voor u. JSON.parse is een veelgebruikte methode die u vaak gebruikt in webontwikkeling wanneer een API gegevens (als tekenreeksen) ontvangt via internet, die vervolgens moet worden omgezet in JSON-objecten.

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

De uitvoer is:

22385.32

Tip

Bestanden zijn in tal van indelingen beschikbaar. Een JSON-bestand is het handigst om mee te werken vanwege de ingebouwde ondersteuning in de programmeertaal. U kunt echter bestanden tegenkomen die een .csv-indeling, een vaste breedte of een willekeurige andere indeling hebben. In dat geval kunt u het beste op npmjs.org een parseerfunctie zoeken voor dat bestandstype.

Gegevens schrijven naar bestanden met fs.writeFile

U hebt in de vorige oefening geleerd hoe u bestanden kunt schrijven. Het is alleen dat u een leeg bestand hebt geschreven. Als u gegevens naar een bestand wilt schrijven, gebruikt u dezelfde writeFile-methode, maar geeft u de gegevens die u wilt schrijven door als de derde parameter.

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

De inhoud van het totals.txt bestand is:

22385.32

Gegevens toevoegen aan bestanden met fs.writeFile

In het voorgaande voorbeeld wordt het bestand telkens overschreven wanneer u er naar schrijft. Soms wilt u gegevens toevoegen aan het bestand in plaats van deze volledig te vervangen. U kunt gegevens toevoegen door een vlag door te geven aan de writeFile methode. Standaard is de vlag ingesteld op w, wat betekent dat het bestand vervangen wordt. Als u in plaats daarvan aan het bestand wilt toevoegen, geeft u de a vlag door, wat betekent dat u toevoegt.

// 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"});

De inhoud van het totals.txt bestand is:

22385.32

Tip

In het bovenstaande codevoorbeeld vertelt \r\n JavaScript om de waarde op een afzonderlijke regel te plaatsen. Als u deze waarde (ook wel een regeleinde genoemd) niet hebt doorgegeven, worden alle nummers op dezelfde regel bij elkaar gezet.

In de volgende oefening voltooit u het totale verkoop-project voor Tailwind Traders door alle verkoopbestanden te lezen en het totaal naar een .txt-bestand te schrijven. Het handelssysteem van het bedrijf kan het bestand vervolgens verwerken.