Node ponuja različne možnosti za pisanje v datoteke v vašem sistemu prek vgrajenega fs modul. Tej vključujejo napiši datoteko(), appendFile(), in createWriteStream().

Kot mnogi jeziki vam Node.js omogoča izbiro med prepisovanjem obstoječe datoteke ali dodajanjem njej. Naučiti se morate tudi o kompromisih med pisanjem datoteke naenkrat in pretakanjem.

Uporaba writeFile()

napiši datoteko() je morda najlažja metoda, ki jo lahko uporabite za pisanje datoteke v Node.

fs.writeFile (ime datoteke, podatki, povratni klic)

Tukaj je primer, ki prikazuje, kako ustvariti datoteko z navadnim besedilom z uporabo writeFile(). Seveda lahko ustvarjate druge vrste datotek, kot je CSV ali JSON.

konst fs = zahtevajo("fs")

fs.writeFile("test.txt", "Nova vsebina", err => {
če (napaka) {
konzolo.log (napaka)
}
});

writeFile() podpira async/await do namesto uporabe povratnih klicev, kot je v zgornjem primeru, lahko ustvarite datoteko, kot sledi.

konst fs = zahtevajo("fs").obljube

asyncfunkcijopiši v datoteko() {
poskusi {
čakati fs.writeFile("test.txt", "Novo nadaljevanje")
} ujeti (napaka) {
konzolo.log (napaka);
}
}

instagram viewer

piši v datoteko ()

WriteFile() privzeto deluje tako, da zamenja vsebino podane datoteke z novo vsebino, če datoteka obstaja. Obstajajo pa zastavice, ki jih lahko uporabite za preglasitev te funkcije, kot so:

  • r+ - odpre datoteko za branje in pisanje.
  • w+ - odpre datoteko za branje in pisanje na začetku datoteke
  • a - odpre datoteko za pisanje na koncu datoteke.
  • a+ - odpre datoteko za branje in pisanje na koncu datoteke.

Zastavico a+ lahko na primer uporabite takole:

konst fs = zahtevajo("fs")

fs.writeFile("test.txt", "Novejša vsebina", { zastavo: "a+" }, napaka => {
če (napaka) {
konzolo.log (napaka)
}
});

Obstaja veliko drugih zastav datotečnega sistema, o katerih se lahko naučite v Dokumentacija vozlišča za modul fs.

The fs modul zagotavlja tudi writeFileSync, sinhrona različica od writeFile().

konst fs = zahtevajo("fs")

fs.writeFileSync("test.txt", "Novejša vsebina", { zastavo: "a+" }, napaka => {
če (napaka) {
konzolo.log (napaka)
}
});

Uporaba createWriteStream()

Slaba stran uporabe napiši datoteko() je, da morate naenkrat shraniti vso vsebino datoteke, ki ni razširljiva za velike datoteke. createWriteStream() vendar podpira zaporedno pisanje. To pomeni, da lahko v datoteko naenkrat zapišete en kos podatkov. Tukaj je splošni sistem za ustvarjanje zapisljivega toka.

fs.createWriteStream (pot, možnosti)

Spodnja koda zapiše podatke v besedilno datoteko s pomočjo tokov

konst fs = zahtevajo("fs")

// ustvarite zapisljiv tok
pustiti writeableStream = fs.createWriteStream("test.txt")

// Zapiši v datoteko s pomočjo zapisovalnega toka
writeableStream.write("Nova vsebina");

Tukaj je še en primer, ki prikazuje, kako lahko podatke pošljete v zapisljivi tok. Ta program zapiše ves vhod iz terminala v datoteko test.txt, dokler je terminal odprt.

konst fs = zahtevajo("fs")
pustiti writableStream = fs.createWriteStream("test.txt");
process.stdin.pipe (writableStream);

Če zaženete ta program iz ukazne vrstice, ga lahko zaprete z Ctrl + d oz Ctrl + c.

Prav tako lahko pišete iz druge datoteke v zapisljivi tok. Razmislite o naslednjem primeru:

konst fs = zahtevajo("fs")
pustiti readableStream = fs.createReadStream("test.txt");
pustiti writableStream = fs.createWriteStream("test2.txt");

readableStream.on("podatki", funkcijo(kos) {
writableStream.write (kos);
});

Ustvarjanje berljivega toka datoteke, ki jo želite kopirati, vam omogoča branje njene vsebine v kosih. Tako bo program za vsak prejeti kos zapisal v ciljno datoteko.

Uporaba appendFile()

appendFile() je preprosta metoda dodajanja vsebine na konec datoteke. Tukaj je primer.

konst fs = zahtevajo("fs")

fs.appendFile("test.txt", "dodana vsebina", err => {
če (napaka) {
konzolo.napaka (napaka);
}
});

Uporabite lahko tudi async/await.

konst fs = zahtevajo("fs").obljube

asyncfunkcijoappendToFile() {
poskusi {
čakati fs.appendFile("test.txt", "dodana vsebina")
} ujeti (napaka) {
konzolo.log (napaka);
}
}

appendToFile()

Všeč mi je napiši datoteko(), appendFile ima tudi sinhrono različico:

fs.appendFileSync("test.txt", "dodana vsebina");

Uporabite tokove za pisanje velikih datotek

Ta članek obravnava več pristopov k pisanju datotek v Node. Čeprav je writeFile() zelo preprost, je bolj primeren za majhne velikosti datotek, saj ne dovoljuje zaporednega pisanja. Če imate opravka z velikimi datotekami, je bolje uporabiti zapisljive tokove.