Gravando arquivos com Node.js

O jeito mais fácil de escrever em arquivos com Node.js é utilizando a API fs.writeFile().

Exemplo:

const fs = require('fs')
const content = 'Some content!'
fs.writeFile('/Users/pauloluan/test.txt', content, err => {
if (err) {
console.error(err)
return
}
// arquivo escrito com sucesso
})

Alternativamente, você pode usar a versão síncrona, fs.writeFileSync():

const fs = require('fs')
const content = 'Some content!'
try {
const data = fs.writeFileSync('/Users/pauloluan/test.txt', content)
// arquivo escrito com sucesso
} catch (err) {
console.error(err)
}

Por padrão, essa API vai apagar o conteúdo do arquivo se ele existir. By default, this API will replace the contents of the file if it does already exist.

Você pode modificar o comportamento padrão especificando uma flag:

fs.writeFile('/Users/pauloluan/test.txt', content, { flag: 'a+' }, err => {})

As flags que você normalmente utilizará são

  • r+ abre o arquivo para leitura e escrita
  • w+ abre o arquivo para leitura e escrita, posicionando a stream no início do arquivo. O arquivo é criado se não existir
  • a abre o arquivo para escrita, posicionando a stream no fim do arquivo. O arquivo é criado se não existir
  • a+ abre o arquivo para leitura e escrita, posicionando a stream no fim do arquivo. O arquivo é criado se não existir

(você pode encontrar mais flags em https://nodejs.org/api/fs.html#fs_file_system_flags)

Acrescentar conteúdo em um arquivo

Um método muito útil acrescentar conteúdo no fim de um arquivo é o fs.appendFile() (e sua contraparte fs.appendFileSync()):

const content = 'Some content!'
fs.appendFile('file.log', content, err => {
if (err) {
console.error(err)
return
}
// feito!
})

Usando streams

Todos esses métodos escrevem o conteúdo completo no arquivo antes de retornarem o controle de volta ao programa (na versão assíncrona, isso significa executar a callback)

Nesse caso, uma opção melhor é escrever o conteúdo do arquivo usando streams.