Node fornisce diverse opzioni per scrivere sui file nel tuo sistema tramite il built-in fs modulo. Questi includono scriviFile(), appendFile(), e createWriteStream().

Come molte lingue, Node.js ti consente di scegliere tra sovrascrivere un file esistente o aggiungervi. Dovresti anche conoscere i compromessi tra la scrittura di un file in una volta sola e lo streaming.

Utilizzo di writeFile()

scriviFile() è forse il metodo più semplice che puoi usare per scrivere un file in Node.

fs.writeFile (nome file, dati, callback)

Ecco un esempio che mostra come creare un file di testo semplice usando writeFile(). Ovviamente puoi creare altri tipi di file come CSV o JSON.

cost fs = richiedere("fs")

fs.writeFile("test.txt", "Nuovo contenuto", err => {
Se (erro) {
consolle.log (err)
}
});

writeFile() supporta async/await do invece di usare callback come nell'esempio sopra, puoi creare il file come segue.

cost fs = richiedere("fs"). promesse

asincronofunzionescrivi su file() {
Tentativo {
aspettare fs.writeFile("test.txt", "Nuovo cont")
} presa (erro) {
consolle.log (err);
}
}

scrivi su file()

instagram viewer

Per impostazione predefinita, writeFile() funziona sostituendo il contenuto del file specificato con il nuovo contenuto se il file esiste. Ci sono tuttavia dei flag che puoi usare per sovrascrivere questa funzionalità come:

  • r+ - apre il file da leggere e scrivere.
  • w+ - apre il file da leggere e scrivere all'inizio del file
  • un - apre il file da scrivere alla fine del file.
  • a+ - apre il file da leggere e scrivere alla fine del file.

Ad esempio, puoi usare il flag a+ in questo modo:

cost fs = richiedere("fs")

fs.writeFile("test.txt", "Contenuto più recente", { bandiera: "a+" }, ehm => {
Se (erro) {
consolle.log (err)
}
});

Ci sono molti altri flag di file system che puoi conoscere in Documentazione del nodo per il modulo fs.

Il fs fornisce anche il modulo writeFileSync, il versione sincrona di writeFile().

cost fs = richiedere("fs")

fs.writeFileSync("test.txt", "Contenuto più recente", { bandiera: "a+" }, ehm => {
Se (erro) {
consolle.log (err)
}
});

Utilizzo di createWriteStream()

Lo svantaggio dell'utilizzo scriviFile() è che devi memorizzare tutto il contenuto del file in una volta che non è scalabile per file di grandi dimensioni. createWriteStream() tuttavia, supporta la scrittura sequenziale. Ciò significa che puoi scrivere un blocco di dati in un file alla volta. Ecco il sistema generale per creare un flusso scrivibile.

fs.createWriteStream (percorso, opzioni)

Il codice seguente scrive i dati in un file di testo utilizzando i flussi

cost fs = richiedere("fs")

// crea un flusso scrivibile
permettere writeableStream = fs.createWriteStream("test.txt")

// Scrive sul file utilizzando lo stream scrivibile
writeableStream.write("Nuovo contenuto");

Ecco un altro esempio che mostra come reindirizzare i dati al flusso scrivibile. Questo programma scrive tutto l'input dal terminale nel file test.txt fintanto che il terminale è aperto.

cost fs = richiedere("fs")
permettere writableStream = fs.createWriteStream("test.txt");
process.stdin.pipe (writableStream);

Se esegui questo programma dalla riga di comando, puoi chiuderlo con CTRL+D o CTRL + C.

Puoi anche scrivere da un altro file nel flusso scrivibile. Considera il seguente esempio:

cost fs = richiedere("fs")
permettere readableStream = fs.createReadStream("test.txt");
permettere writableStream = fs.createWriteStream("test2.txt");

readableStream.on("dati", funzione(pezzo) {
scrivibileStream.write (pezzo);
});

La creazione di un flusso leggibile del file che si desidera copiare consente di leggerne il contenuto in blocchi. Quindi, per ogni blocco ricevuto, il programma scriverà nel file di destinazione.

Utilizzo di appendFile()

appendFile() è un metodo semplice per aggiungere contenuto alla fine del file. Ecco un esempio.

cost fs = richiedere("fs")

fs.appendFile("test.txt", "contenuto aggiunto", err => {
Se (erro) {
consolle.errore (errore);
}
});

Puoi anche usare async/await.

cost fs = richiedere("fs"). promesse

asincronofunzioneappendToFile() {
Tentativo {
aspettare fs.appendFile("test.txt", "contenuto aggiunto")
} presa (erro) {
consolle.log (err);
}
}

appendToFile()

Piace scriviFile(), appendFile ha anche una versione sincrona:

fs.appendFileSync("test.txt", "contenuto aggiunto");

Usa gli stream per scrivere file di grandi dimensioni

Questo articolo ha discusso diversi approcci alla scrittura di file in Node. Sebbene writeFile() sia molto semplice, è più adatto per file di piccole dimensioni poiché non consente scritture sequenziali. Se hai a che fare con file di grandi dimensioni, è meglio utilizzare flussi scrivibili.