Node poskytuje různé možnosti pro zápis do souborů ve vašem systému prostřednictvím vestavěného fs modul. Tyto zahrnují writeFile(), appendFile(), a createWriteStream().
Stejně jako mnoho jazyků vám i Node.js umožňuje vybrat si mezi přepsáním existujícího souboru nebo připojením k němu. Měli byste se také dozvědět o kompromisech mezi zápisem souboru najednou a jeho streamováním.
Použití writeFile()
writeFile() je možná nejjednodušší metoda, kterou můžete použít k zápisu souboru v Node.
fs.writeFile (název souboru, data, zpětné volání)
Zde je příklad ukazující, jak vytvořit soubor ve formátu prostého textu pomocí writeFile(). Můžete samozřejmě vytvořit jiné typy souborů, jako je CSV nebo JSON.
konst fs = vyžadovat("fs")
fs.writeFile("test.txt", "Nový obsah", err => {
-li (chyba) {
řídicí panel.log (chyba)
}
});
writeFile() podporuje funkci async/await do namísto použití zpětných volání jako ve výše uvedeném příkladu, soubor můžete vytvořit následovně.
konst fs = vyžadovat("fs").slibuje
asynchronnífunkcewriteToFile()
{
Snaž se {
čekat fs.writeFile("test.txt", "Nové pokračování")
} úlovek (chyba) {
řídicí panel.log (chyba);
}
}
writeToFile()
Ve výchozím nastavení funguje writeFile() tak, že nahradí obsah zadaného souboru novým obsahem, pokud soubor existuje. Existují však příznaky, které můžete použít k přepsání této funkce, jako například:
- r+ - otevře soubor pro čtení a zápis.
- w+ - otevře soubor pro čtení a zápis na začátku souboru
- A - otevře soubor pro zápis na konec souboru.
- a+ - otevře soubor pro čtení a zápis na konec souboru.
Můžete například použít příznak a+ takto:
konst fs = vyžadovat("fs")
fs.writeFile("test.txt", "Novější obsah", { vlajka: "a+" }, chyba => {
-li (chyba) {
řídicí panel.log (chyba)
}
});
Existuje mnoho dalších příznaků souborového systému, o kterých se můžete dozvědět v Dokumentace uzlu pro modul fs.
The fs modul také poskytuje writeFileSync, synchronní verze funkce writeFile().
konst fs = vyžadovat("fs")
fs.writeFileSync("test.txt", "Novější obsah", { vlajka: "a+" }, chyba => {
-li (chyba) {
řídicí panel.log (chyba)
}
});
Použití createWriteStream()
Nevýhoda používání writeFile() spočívá v tom, že musíte uložit veškerý obsah souboru najednou, což není škálovatelné pro velké soubory. createWriteStream() nicméně podporuje sekvenční zápis. To znamená, že můžete do souboru zapsat jeden kus dat najednou. Zde je obecný systém pro vytváření zapisovatelného streamu.
fs.createWriteStream (cesta, možnosti)
Níže uvedený kód zapisuje data do textového souboru pomocí proudů
konst fs = vyžadovat("fs")
// vytvořit zapisovatelný stream
nechat writeableStream = fs.createWriteStream("test.txt")
// Zápis do souboru pomocí zapisovatelného streamu
writeableStream.write("Nový obsah");
Zde je další příklad ukazující, jak můžete data převést do zapisovatelného streamu. Tento program zapisuje veškerý vstup z terminálu do souboru test.txt, dokud je terminál otevřený.
konst fs = vyžadovat("fs")
nechat writableStream = fs.createWriteStream("test.txt");
process.stdin.pipe (writableStream);
Pokud tento program spustíte z příkazového řádku, můžete jej ukončit pomocí Ctrl + d nebo Ctrl + c.
Do zapisovatelného streamu můžete také zapisovat z jiného souboru. Zvažte následující příklad:
konst fs = vyžadovat("fs")
nechat readableStream = fs.createReadStream("test.txt");
nechat writableStream = fs.createWriteStream("test2.txt");
readableStream.on("data", funkce(kus) {
writableStream.write (kus);
});
Vytvoření čitelného proudu souboru, který chcete zkopírovat, vám umožní číst jeho obsah po částech. Takže pro každý přijatý blok program zapíše do cílového souboru.
Použití appendFile()
appendFile() je přímočarý způsob přidávání obsahu na konec souboru. Zde je příklad.
konst fs = vyžadovat("fs")
fs.appendFile("test.txt", "přidaný obsah", err => {
-li (chyba) {
řídicí panel.chyba (chyba);
}
});
Můžete také použít async/wait.
konst fs = vyžadovat("fs").slibuje
asynchronnífunkceappendToFile() {
Snaž se {
čekat fs.appendFile("test.txt", "přidaný obsah")
} úlovek (chyba) {
řídicí panel.log (chyba);
}
}
appendToFile()
Jako writeFile(), appendFile má také synchronní verzi:
fs.appendFileSync("test.txt", "přidaný obsah");
Použijte streamy k zápisu velkých souborů
Tento článek pojednává o několika přístupech k zápisu souborů v Node. Zatímco writeFile() je velmi přímočará, je vhodnější pro malé velikosti souborů, protože neumožňuje sekvenční zápisy. Pokud pracujete s velkými soubory, je lepší použít zapisovatelné streamy.