Läsa och skriva till filer

Slutförd

Tailwind Traders-programmet måste läsa varje butiks försäljningsdata och sedan beräkna summan och sedan skriva summan av alla enskilda butiksförsäljningsfiler till en ny fil.

Läsa data från filer med fs.readFile

Du läser filer med hjälp av metoden readFile i modulen fs.

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

Det objekt som returneras av metoden readFile är ett Buffer-objekt. Den innehåller innehållet i filen i binärt format. Anta till exempel att du har en fil som heter sales.json med följande innehåll.

{
  "total": 22385.32
}

Loggning av returvärdet för metoden readFile skulle ge värdet för Buffer.

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

Det resultatet är inte användbart. Du har kanske läst filen, men dessa data är inte läsbara. Men det gör inget. JavaScript kan konvertera ett Buffer värde till ett strängvärde som du kan använda för att beräkna summan. Det gör du genom att anropa String-objektet och skicka in bufferten.

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

Resultatet är:

{
  "total": 22385.32
}

Parsa data med JSON.parse

Det räcker inte att bara få data i ett strängformat. Det är fortfarande bara en massa tecken men är nu i ett format som du kan läsa. Du vill kunna omvandla den här strängen till programmatiskt tillgängliga data (kallas parsning av data).

JavaScript har en inbyggd parser för JSON-filer. Du behöver inte inkludera något för att använda det. Det är bara att använda JSON-objektet. Som en bonus behöver du inte konvertera ett Buffer-värde till en sträng innan du parsar det. Metoden JSON.parse kan göra detta. JSON.parse är en vanlig metod som du använder ofta i webbutveckling när ett API tar emot data (som strängar) via Internet, som sedan måste omvandlas till JSON-objekt.

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

Resultatet är:

22385.32

Dricks

Filer kan ha olika format. Det är bäst att använda JSON-filer eftersom det finns inbyggt stöd för JSON i språket. Men du kan även stöta på .csv-filer, filer med fast bredd eller något annat format. I så fall rekommenderar vi att du söker på npmjs.org efter en parser för den filtypen.

Skriva data till filer med fs.writeFile

Du lärde dig att skriva filer i föregående övning. Men då skrev du en tom fil. När du skriver data till en fil använder du också writeFile-metoden, men då skickar du in de data som du vill skriva som den tredje parametern.

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

Innehållet i totals.txt filen är:

22385.32

Lägga till data i filer med fs.writeFile

I föregående exempel skrivs filen över varje gång du skriver till den. Ibland vill du lägga till data i filen i stället för att ersätta dem helt. Du kan lägga till data genom att skicka en flagga till writeFile metoden. Som standard är flaggan inställd på w, vilket innebär att filen ersätts. Om du vill lägga till i filen i stället skickar du a flaggan, vilket innebär att den läggs till.

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

Innehållet i totals.txt filen är:

22385.32

Dricks

I föregående kodexempel ovan talar \r\n om för JavaScript att värdet ska vara på en egen rad. Om du inte skickar in det här värdet (så kallad vagnretur/radmatning) får du alla tal direkt efter varandra på samma rad.

I nästa övning slutför du projektet med total försäljning för Tailwind Traders genom att läsa alla försäljningsfiler och skriva totalsumman till en .txt-fil. Företagets handelssystem kan sedan bearbeta filen.