Node biedt verschillende opties voor het schrijven naar bestanden in uw systeem via de ingebouwde fs module. Waaronder schrijfFile(), appendFile(), en createWriteStream().
Zoals veel talen, laat Node.js je kiezen tussen het overschrijven van een bestaand bestand of het toevoegen ervan. U moet ook meer te weten komen over de afwegingen tussen het in één keer schrijven van een bestand en het streamen ervan.
WriteFile() gebruiken
schrijfFile() is misschien wel de gemakkelijkste methode die u kunt gebruiken om een bestand in Node te schrijven.
fs.writeFile (bestandsnaam, gegevens, terugbellen)
Hier is een voorbeeld dat laat zien hoe u een tekstbestand zonder opmaak maakt met writeFile(). Creëren kan natuurlijk ook andere bestandstypen zoals CSV of JSON.
const fs = vereisen("fs")
fs.writeFile("test.txt", "Nieuwe inhoud", err => {
als (fout) {
troosten.log (fout)
}
});
writeFile() ondersteunt async/wait do in plaats van callbacks te gebruiken zoals in het bovenstaande voorbeeld, kunt u het bestand als volgt maken.
const fs = vereisen("fs"). belooft
asynchronefunctieschrijvenNaarBestand() {
proberen {
wachten fs.writeFile("test.txt", "Nieuwe vervolg")
} vangst (fout) {
troosten.log (fout);
}
}
schrijfNaarBestand()
Standaard werkt writeFile() door de inhoud van het opgegeven bestand te vervangen door nieuwe inhoud als het bestand bestaat. Er zijn echter vlaggen die u kunt gebruiken om deze functionaliteit te negeren, zoals:
- r+ - opent het bestand om te lezen en te schrijven.
- w+ - opent het bestand om te lezen en schrijven aan het begin van het bestand
- a - opent het te schrijven bestand aan het einde van het bestand.
- een+ - opent het bestand om te lezen en te schrijven aan het einde van het bestand.
U kunt de vlag a+ bijvoorbeeld als volgt gebruiken:
const fs = vereisen("fs")
fs.writeFile("test.txt", "Nieuwere inhoud", { vlag: "a+" }, err => {
als (fout) {
troosten.log (fout)
}
});
Er zijn veel andere bestandssysteemvlaggen waarover u meer te weten kunt komen in de Knooppuntdocumentatie voor de fs-module.
De fs module biedt ook: schrijvenFileSync, de synchrone versie van writeFile().
const fs = vereisen("fs")
fs.writeFileSync("test.txt", "Nieuwere inhoud", { vlag: "a+" }, err => {
als (fout) {
troosten.log (fout)
}
});
CreateWriteStream() gebruiken
Het nadeel van het gebruik schrijfFile() is dat u alle inhoud van het bestand in één keer moet opslaan, wat niet schaalbaar is voor grote bestanden. createWriteStream() ondersteunt echter sequentieel schrijven. Dit betekent dat u één stuk gegevens tegelijk naar een bestand kunt schrijven. Hier is het algemene systeem voor het maken van een beschrijfbare stream.
fs.createWriteStream (pad, opties)
De onderstaande code schrijft gegevens naar een tekstbestand met behulp van streams
const fs = vereisen("fs")
// maak een beschrijfbare stream
laten writeableStream = fs.createWriteStream("test.txt")
// Schrijf naar het bestand met behulp van de beschrijfbare stream
writeableStream.write("Nieuwe inhoud");
Hier is nog een voorbeeld dat laat zien hoe u gegevens naar de beschrijfbare stream kunt leiden. Dit programma schrijft alle invoer van de terminal naar het test.txt-bestand zolang de terminal open is.
const fs = vereisen("fs")
laten writableStream = fs.createWriteStream("test.txt");
proces.stdin.pipe (writableStream);
Als u dit programma vanaf de opdrachtregel uitvoert, kunt u het afsluiten met Ctrl + d of Ctrl + c.
U kunt ook vanuit een ander bestand naar de beschrijfbare stream schrijven. Beschouw het volgende voorbeeld:
const fs = vereisen("fs")
laten readableStream = fs.createReadStream("test.txt");
laten writableStream = fs.createWriteStream("test2.txt");
readableStream.on("gegevens", functie(brok) {
writableStream.write (brok);
});
Door een leesbare stroom te maken van het bestand dat u wilt kopiëren, kunt u de inhoud ervan in stukjes lezen. Dus voor elke ontvangen chunk, zal het programma naar het doelbestand schrijven.
appendFile() gebruiken
appendFile() is een eenvoudige methode om inhoud aan het einde van het bestand toe te voegen. Hier is een voorbeeld.
const fs = vereisen("fs")
fs.appendFile("test.txt", "toegevoegde inhoud", err => {
als (fout) {
troosten.fout (fout);
}
});
U kunt ook async/wait gebruiken.
const fs = vereisen("fs"). belooft
asynchronefunctieappendToFile() {
proberen {
wachten fs.appendFile("test.txt", "toegevoegde inhoud")
} vangst (fout) {
troosten.log (fout);
}
}
appendToFile()
Graag willen schrijfFile(), appendFile heeft ook een synchrone versie:
fs.appendFileSync("test.txt", "toegevoegde inhoud");
Streams gebruiken om grote bestanden te schrijven
Dit artikel besprak verschillende benaderingen voor het schrijven van bestanden in Node. Hoewel writeFile() heel eenvoudig is, is het beter geschikt voor kleine bestandsgroottes omdat het geen sequentiële schrijfacties toestaat. Als je te maken hebt met grote bestanden, kun je beter beschrijfbare streams gebruiken.