Node poskytuje rôzne možnosti zapisovania do súborov vo vašom systéme prostredníctvom vstavaného fs modul. Tie obsahujú writeFile(), appendFile()a createWriteStream().

Ako mnoho jazykov, aj Node.js vám umožňuje vybrať si medzi prepísaním existujúceho súboru alebo pripojením k nemu. Mali by ste sa tiež dozvedieť o kompromisoch medzi napísaním súboru jedným ťahom a jeho streamovaním.

Použitie writeFile()

writeFile() je možno najjednoduchšia metóda, ktorú môžete použiť na zapisovanie súboru v Node.

fs.writeFile (názov súboru, údaje, spätné volanie)

Tu je príklad, ktorý ukazuje, ako vytvoriť obyčajný textový súbor pomocou writeFile(). Môžete samozrejme vytvoriť iné typy súborov, napríklad CSV alebo JSON.

konšt fs = vyžadovať("fs")

fs.writeFile("test.txt", "Nový obsah", err => {
ak (chyba) {
konzoly.log (chyba)
}
});

writeFile() podporuje funkciu async/wait do namiesto použitia spätných volaní ako v príklade vyššie, súbor môžete vytvoriť nasledovne.

konšt fs = vyžadovať("fs").sľubuje

asyncfunkciuwriteToFile()

instagram viewer
{
skúste {
čakať fs.writeFile("test.txt", "Nové pokračovanie")
} chytiť (chyba) {
konzoly.log (chyba);
}
}

writeToFile()

V predvolenom nastavení funguje writeFile() nahradením obsahu určeného súboru novým obsahom, ak súbor existuje. Existujú však príznaky, ktoré môžete použiť na prepísanie tejto funkcie, ako napríklad:

  • r+ - otvorí súbor na čítanie a zápis.
  • w+ - otvorí súbor na čítanie a zápis na začiatku súboru
  • a - otvorí súbor na zápis na koniec súboru.
  • a+ - otvorí súbor na čítanie a zápis na konci súboru.

Príznak a+ môžete použiť napríklad takto:

konšt fs = vyžadovať("fs")

fs.writeFile("test.txt", "Novší obsah", { vlajka: "a+" }, chyba => {
ak (chyba) {
konzoly.log (chyba)
}
});

Existuje mnoho ďalších príznakov súborového systému, o ktorých sa môžete dozvedieť v Dokumentácia uzla pre modul fs.

The fs modul tiež poskytuje writeFileSync, synchrónna verzia funkcie writeFile().

konšt fs = vyžadovať("fs")

fs.writeFileSync("test.txt", "Novší obsah", { vlajka: "a+" }, chyba => {
ak (chyba) {
konzoly.log (chyba)
}
});

Použitie createWriteStream()

Nevýhoda používania writeFile() je, že musíte uložiť celý obsah súboru naraz, čo nie je možné pri veľkých súboroch. createWriteStream() podporuje však sekvenčné písanie. To znamená, že môžete naraz zapisovať do súboru jeden kus údajov. Tu je všeobecný systém na vytváranie zapisovateľného streamu.

fs.createWriteStream (cesta, možnosti)

Nižšie uvedený kód zapisuje údaje do textového súboru pomocou streamov

konšt fs = vyžadovať("fs")

// vytvorte zapisovateľný stream
nech writeableStream = fs.createWriteStream("test.txt")

// Zápis do súboru pomocou zapisovateľného streamu
writeableStream.write("Nový obsah");

Tu je ďalší príklad, ktorý ukazuje, ako môžete preniesť údaje do zapisovateľného prúdu. Tento program zapisuje všetky vstupy z terminálu do súboru test.txt, pokiaľ je terminál otvorený.

konšt fs = vyžadovať("fs")
nech writableStream = fs.createWriteStream("test.txt");
process.stdin.pipe (writableStream);

Ak spustíte tento program z príkazového riadku, môžete ho ukončiť pomocou Ctrl + d alebo Ctrl + c.

Do zapisovateľného streamu môžete zapisovať aj z iného súboru. Zvážte nasledujúci príklad:

konšt fs = vyžadovať("fs")
nech readableStream = fs.createReadStream("test.txt");
nech writableStream = fs.createWriteStream("test2.txt");

readableStream.on("data", funkciu(kus) {
writableStream.write (kúsok);
});

Vytvorenie čitateľného prúdu súboru, ktorý chcete skopírovať, vám umožní čítať jeho obsah po častiach. Takže pre každý prijatý blok program zapíše do cieľového súboru.

Použitie appendFile()

appendFile() je jednoduchý spôsob pridávania obsahu na koniec súboru. Tu je príklad.

konšt fs = vyžadovať("fs")

fs.appendFile("test.txt", "pridaný obsah", err => {
ak (chyba) {
konzoly.chyba (chyba);
}
});

Môžete tiež použiť async/wait.

konšt fs = vyžadovať("fs").sľubuje

asyncfunkciuappendToFile() {
skúste {
čakať fs.appendFile("test.txt", "pridaný obsah")
} chytiť (chyba) {
konzoly.log (chyba);
}
}

appendToFile()

Páči sa mi to writeFile(), appendFile má tiež synchrónnu verziu:

fs.appendFileSync("test.txt", "pridaný obsah");

Na zapisovanie veľkých súborov použite prúdy

Tento článok diskutoval o niekoľkých prístupoch k zapisovaniu súborov v Node. Zatiaľ čo writeFile() je veľmi jednoduché, je vhodnejšie pre malé veľkosti súborov, pretože neumožňuje sekvenčné zápisy. Ak pracujete s veľkými súbormi, je lepšie použiť zapisovateľné prúdy.