Node tarjoaa erilaisia vaihtoehtoja järjestelmän tiedostoihin kirjoittamiseen sisäänrakennetun järjestelmän kautta fs moduuli. Nämä sisältävät kirjoitustiedosto(), appendFile(), ja createWriteStream().
Kuten monet muut kielet, Node.js antaa sinun valita olemassa olevan tiedoston korvaamisen vai siihen liittämisen. Sinun tulisi myös oppia kompromisseista tiedoston kirjoittamisen ja suoratoiston välillä.
writeFile()
kirjoitustiedosto() on ehkä helpoin tapa kirjoittaa tiedosto Nodeen.
fs.writeFile (tiedostonimi, tiedot, takaisinsoitto)
Tässä on esimerkki siitä, kuinka pelkkä tekstitiedosto luodaan writeFile()-komennolla. Voit toki luoda muut tiedostotyypit, kuten CSV tai JSON.
konst fs = vaatia("fs")
fs.writeFile("test.txt", "Uusi sisältö", err => {
jos (err) {
konsoli.log (err)
}
});
writeFile() tukee async/await do -toimintoa sen sijaan, että käyttäisit takaisinkutsuja kuten yllä olevassa esimerkissä, voit luoda tiedoston seuraavasti.
konst fs = vaatia("fs"). lupaa
asynktoimintowriteToFile() {
yrittää {
odottaa fs.writeFile("testi.txt", "uusi jatko")
} ottaa kiinni (err) {
konsoli.log (err);
}
}
writeToFile()
Oletuksena writeFile() toimii korvaamalla määritetyn tiedoston sisällön uudella sisällöllä, jos tiedosto on olemassa. On kuitenkin olemassa lippuja, joilla voit ohittaa tämän toiminnon, kuten:
- r+ - avaa tiedoston lukemista ja kirjoittamista varten.
- w+ - avaa tiedoston lukemista ja kirjoittamista varten tiedoston alkuun
- a - avaa tiedoston kirjoitettavaksi tiedoston loppuun.
- a+ - avaa tiedoston lukemista ja kirjoittamista varten tiedoston loppuun.
Voit esimerkiksi käyttää a+-lippua näin:
konst fs = vaatia("fs")
fs.writeFile("test.txt", "Uudempi sisältö", { lippu: "a+" }, err => {
jos (err) {
konsoli.log (err)
}
});
On monia muita tiedostojärjestelmän lippuja, joista voit oppia fs-moduulin solmudokumentaatio.
The fs moduuli tarjoaa myös writeFileSync, synkroninen versio / writeFile().
konst fs = vaatia("fs")
fs.writeFileSync("test.txt", "Uudempi sisältö", { lippu: "a+" }, err => {
jos (err) {
konsoli.log (err)
}
});
CreateWriteStream()
Käytön huono puoli kirjoitustiedosto() on, että sinun on tallennettava kaikki tiedoston sisältö kerralla, mikä ei ole skaalattavissa suurille tiedostoille. createWriteStream() tukee kuitenkin peräkkäistä kirjoittamista. Tämä tarkoittaa, että voit kirjoittaa tiedostoon yhden osan dataa kerrallaan. Tässä on yleinen järjestelmä kirjoitettavan streamin luomiseksi.
fs.createWriteStream (polku, asetukset)
Alla oleva koodi kirjoittaa tiedot tekstitiedostoon streamien avulla
konst fs = vaatia("fs")
// luo kirjoitettava stream
päästää writeableStream = fs.createWriteStream("test.txt")
// Kirjoita tiedostoon kirjoitettavan virran avulla
writeableStream.write("Uusi sisältö");
Tässä on toinen esimerkki siitä, kuinka voit siirtää tietoja kirjoitettavaan tietovirtaan. Tämä ohjelma kirjoittaa kaiken syötteen päätteestä test.txt-tiedostoon niin kauan kuin pääte on auki.
konst fs = vaatia("fs")
päästää writableStream = fs.createWriteStream("testi.txt");
process.stdin.pipe (kirjoitettava Stream);
Jos suoritat tämän ohjelman komentoriviltä, voit lopettaa sen komennolla Ctrl + d tai Ctrl + c.
Voit myös kirjoittaa toisesta tiedostosta kirjoitettavaan streamiin. Harkitse seuraavaa esimerkkiä:
konst fs = vaatia("fs")
päästää readableStream = fs.createReadStream("testi.txt");
päästää writableStream = fs.createWriteStream("test2.txt");
readableStream.on("data", toiminto(kimpale) {
writableStream.write (pala);
});
Kun luot luettavan virran kopioitavasta tiedostosta, voit lukea sen sisällön paloina. Joten jokaisesta vastaanotetusta palasta ohjelma kirjoittaa kohdetiedostoon.
appendFile()
appendFile() on yksinkertainen tapa lisätä sisältöä tiedoston loppuun. Tässä on esimerkki.
konst fs = vaatia("fs")
fs.appendFile("test.txt", "lisätty sisältö", err => {
jos (err) {
konsoli.error (err);
}
});
Voit myös käyttää async/await-toimintoa.
konst fs = vaatia("fs"). lupaa
asynktoimintoliitä tiedostoon() {
yrittää {
odottaa fs.appendFile("testi.txt", "lisätty sisältö")
} ottaa kiinni (err) {
konsoli.log (err);
}
}
appendToFile()
Kuten kirjoitustiedosto(), appendFilellä on myös synkroninen versio:
fs.appendFileSync("test.txt", "lisätty sisältö");
Käytä Streamia suurten tiedostojen kirjoittamiseen
Tässä artikkelissa käsiteltiin useita lähestymistapoja tiedostojen kirjoittamiseen Nodessa. Vaikka writeFile() on hyvin yksinkertainen, se sopii paremmin pienille tiedostokokoille, koska se ei salli peräkkäistä kirjoittamista. Jos käsittelet suuria tiedostoja, on parempi käyttää kirjoitettavia streameja.