Node giver forskellige muligheder for at skrive til filer i dit system gennem den indbyggede fs modul. Disse omfatter skriveFil(), appendFile(), og createWriteStream().
Som mange sprog giver Node.js dig mulighed for at vælge mellem at overskrive en eksisterende fil eller føje til den. Du bør også lære om afvejningen mellem at skrive en fil på én gang og streame den.
Brug af writeFile()
skriveFil() er måske den nemmeste metode du kan bruge til at skrive en fil i Node.
fs.writeFile (filnavn, data, tilbagekald)
Her er et eksempel, der viser, hvordan man opretter en almindelig tekstfil ved hjælp af writeFile(). Du kan selvfølgelig oprette andre filtyper såsom CSV eller JSON.
konst fs = kræve("fs")
fs.writeFile("test.txt", "Nyt indhold", err => {
hvis (fejl) {
konsol.log (fejl)
}
});
writeFile() understøtter async/await do i stedet for at bruge tilbagekald som i eksemplet ovenfor, kan du oprette filen som følger.
konst fs = kræve("fs").løfter
asynkronfungereskrivTilFil() {
prøve {
vente fs.writeFile("test.txt", "Ny forts")
} fangst (fejl) {
konsol.log (fejl);
}
}
writeToFile()
WriteFile() fungerer som standard ved at erstatte indholdet af den angivne fil med nyt indhold, hvis filen eksisterer. Der er dog flag, du kan bruge til at tilsidesætte denne funktionalitet, såsom:
- r+ - åbner filen for at læse og skrive.
- w+ - åbner filen for at læse og skrive i begyndelsen af filen
- -en - åbner filen for at skrive i slutningen af filen.
- a+ - åbner filen for at læse og skrive i slutningen af filen.
For eksempel kan du bruge flaget a+ som dette:
konst fs = kræve("fs")
fs.writeFile("test.txt", "Nyere indhold", { flag: "a+" }, fejl => {
hvis (fejl) {
konsol.log (fejl)
}
});
Der er mange andre filsystemflag, som du kan lære om i Node dokumentation for fs modulet.
Det fs modul giver også skriveFileSync, det synkron version af writeFile().
konst fs = kræve("fs")
fs.writeFileSync("test.txt", "Nyere indhold", { flag: "a+" }, fejl => {
hvis (fejl) {
konsol.log (fejl)
}
});
Brug createWriteStream()
Ulempen ved at bruge skriveFil() er, at du skal gemme alt indholdet af filen på én gang, hvilket ikke er skalerbart til store filer. createWriteStream() understøtter dog sekventiel skrivning. Det betyder, at du kan skrive én del data til en fil ad gangen. Her er det generelle system til at oprette en skrivbar stream.
fs.createWriteStream (sti, muligheder)
Koden nedenfor skriver data til en tekstfil ved hjælp af streams
konst fs = kræve("fs")
// opret en skrivbar stream
lade writeableStream = fs.createWriteStream("test.txt")
// Skriv til filen ved hjælp af den skrivbare stream
writeableStream.write("Nyt indhold");
Her er et andet eksempel, der viser, hvordan du kan overføre data til den skrivbare strøm. Dette program skriver alle input fra terminalen til test.txt-filen, så længe terminalen er åben.
konst fs = kræve("fs")
lade writableStream = fs.createWriteStream("test.txt");
process.stdin.pipe (skrivbarStream);
Hvis du kører dette program fra kommandolinjen, kan du afslutte det med Ctrl + d eller Ctrl + c.
Du kan også skrive fra en anden fil til den skrivbare stream. Overvej følgende eksempel:
konst fs = kræve("fs")
lade readableStream = fs.createReadStream("test.txt");
lade writableStream = fs.createWriteStream("test2.txt");
readableStream.on("data", fungere(luns) {
writableStream.write (chunk);
});
Oprettelse af en læsbar strøm af den fil, du vil kopiere, giver dig mulighed for at læse dens indhold i bidder. Så for hver modtaget del, vil programmet skrive til destinationsfilen.
Brug af appendFile()
appendFile() er en ligetil metode til at tilføje indhold til slutningen af filen. Her er et eksempel.
konst fs = kræve("fs")
fs.appendFile("test.txt", "added content", err => {
hvis (fejl) {
konsol.fejl (fejl);
}
});
Du kan også bruge async/wait.
konst fs = kræve("fs").løfter
asynkronfungeretilføj til fil() {
prøve {
vente fs.appendFile("test.txt", "tilføjet indhold")
} fangst (fejl) {
konsol.log (fejl);
}
}
appendToFile()
Synes godt om skriveFil(), appendFile har også en synkron version:
fs.appendFileSync("test.txt", "tilføjet indhold");
Brug streams til at skrive store filer
Denne artikel diskuterede flere tilgange til at skrive filer i Node. Mens writeFile() er meget ligetil, er den bedre egnet til små filstørrelser, da den ikke tillader sekventiel skrivning. Hvis du har med store filer at gøre, er det bedre at bruge skrivbare streams.