Čvor pruža različite opcije za pisanje u datoteke u vašem sustavu putem ugrađenog fs modul. To uključuje napišiDatoteka(), appendFile(), i createWriteStream().

Kao i mnogi jezici, Node.js vam omogućuje da odaberete između prepisivanja postojeće datoteke ili dodavanja njoj. Također biste trebali naučiti o kompromisima između pisanja datoteke u jednom potezu i njenog strujanja.

Korištenje writeFile()

napišiDatoteka() je možda najlakša metoda koju možete koristiti za pisanje datoteke u Node.

fs.writeFile (naziv datoteke, podaci, povratni poziv)

Ovdje je primjer koji pokazuje kako stvoriti običan tekstualnu datoteku koristeći writeFile(). Naravno da možete stvarati druge vrste datoteka kao što je CSV ili JSON.

konst fs = zahtijevati("fs")

fs.writeFile("test.txt", "Novi sadržaj", err => {
ako (err) {
konzola.log (pogreška)
}
});

writeFile() podržava async/await do umjesto korištenja povratnih poziva kao u gornjem primjeru, možete kreirati datoteku na sljedeći način.

konst fs = zahtijevati("fs").obećanja
instagram viewer

asinkfunkcijanapiši u datoteku() {
probati {
čekati fs.writeFile("test.txt", "Novi nastavak")
} ulov (err) {
konzola.log (greška);
}
}

napiši u datoteku()

Prema zadanim postavkama, writeFile() radi zamjenom sadržaja navedene datoteke novim sadržajem ako datoteka postoji. Međutim, postoje zastavice koje možete upotrijebiti za nadjačavanje ove funkcije kao što su:

  • r+ - otvara datoteku za čitanje i pisanje.
  • w+ - otvara datoteku za čitanje i pisanje na početku datoteke
  • a - otvara datoteku za pisanje na kraju datoteke.
  • a+ - otvara datoteku za čitanje i pisanje na kraju datoteke.

Na primjer, možete koristiti oznaku a+ ovako:

konst fs = zahtijevati("fs")

fs.writeFile("test.txt", "Noviji sadržaj", { zastava: "a+" }, greška => {
ako (err) {
konzola.log (pogreška)
}
});

Postoje mnoge druge oznake datotečnog sustava o kojima možete saznati u Dokumentacija čvora za modul fs.

The fs modul također pruža writeFileSync, the sinkrona verzija od writeFile().

konst fs = zahtijevati("fs")

fs.writeFileSync("test.txt", "Novi sadržaj", { zastava: "a+" }, greška => {
ako (err) {
konzola.log (pogreška)
}
});

Korištenje createWriteStream()

Loša strana korištenja napišiDatoteka() je da morate pohraniti sav sadržaj datoteke odjednom što nije skalabilno za velike datoteke. createWriteStream() međutim, podržava sekvencijalno pisanje. To znači da možete zapisivati ​​jedan po jedan dio podataka u datoteku. Ovdje je opći sustav za stvaranje streama koji se može pisati.

fs.createWriteStream (put, opcije)

Kod u nastavku zapisuje podatke u tekstualnu datoteku pomoću streamova

konst fs = zahtijevati("fs")

// stvoriti stream za pisanje
neka writeableStream = fs.createWriteStream("test.txt")

// Zapiši u datoteku koristeći stream za pisanje
writeableStream.write("Novi sadržaj");

Evo još jednog primjera koji pokazuje kako možete usmjeriti podatke u stream koji se može pisati. Ovaj program zapisuje sav ulaz s terminala u datoteku test.txt sve dok je terminal otvoren.

konst fs = zahtijevati("fs")
neka writableStream = fs.createWriteStream("test.txt");
process.stdin.pipe (writableStream);

Ako ovaj program pokrenete iz naredbenog retka, možete ga zatvoriti pomoću Ctrl + d ili Ctrl + c.

Također možete pisati iz druge datoteke u stream za pisanje. Razmotrimo sljedeći primjer:

konst fs = zahtijevati("fs")
neka readableStream = fs.createReadStream("test.txt");
neka writableStream = fs.createWriteStream("test2.txt");

readableStream.on("podaci", funkcija(komad) {
writableStream.write (komad);
});

Stvaranje čitljivog toka datoteke koju želite kopirati omogućuje vam čitanje njezinog sadržaja u komadima. Dakle, za svaki primljeni dio, program će pisati u odredišnu datoteku.

Korištenje appendFile()

appendFile() je jednostavna metoda dodavanja sadržaja na kraj datoteke. Evo primjera.

konst fs = zahtijevati("fs")

fs.appendFile("test.txt", "dodatni sadržaj", err => {
ako (err) {
konzola.pogreška (greška);
}
});

Također možete koristiti async/await.

konst fs = zahtijevati("fs").obećanja

asinkfunkcijaappendToFile() {
probati {
čekati fs.appendFile("test.txt", "dodani sadržaj")
} ulov (err) {
konzola.log (greška);
}
}

appendToFile()

Kao napišiDatoteka(), appendFile također ima sinkronu verziju:

fs.appendFileSync("test.txt", "dodani sadržaj");

Koristite streamove za pisanje velikih datoteka

Ovaj članak raspravlja o nekoliko pristupa pisanju datoteka u Node. Iako je writeFile() vrlo jednostavan, prikladniji je za male veličine datoteka jer ne dopušta sekvencijalno upisivanje. Ako imate posla s velikim datotekama, bolje je koristiti streamove za pisanje.