Como ler e escrever arquivos no Node
Manipular arquivos é uma tarefa comum em muitas aplicações, e o Node.js fornece uma poderosa API para essa tarefa por meio do módulo fs
(file system). Neste post, vamos explorar como ler e escrever arquivos no Node.js.
Introdução ao módulo fs
O módulo fs
faz parte do core do Node.js, ou seja, ele já vem instalado e não precisa de pacotes adicionais. Ele oferece métodos para operações de leitura e escrita, tanto de maneira síncrona quanto assíncrona. Vamos entender essas abordagens e quando cada uma delas é mais adequada.
1. Lendo arquivos
a. Leitura assíncrona
A leitura assíncrona é preferível para operações de I/O porque permite que outras tarefas sejam executadas enquanto o arquivo está sendo lido. Use o método fs.readFile
para isso.
const fs = require('fs');
fs.readFile('exemplo.txt', 'utf8', (err, data) => {
if (err) {
console.error('Erro ao ler o arquivo:', err);
return;
}
console.log('Conteúdo do arquivo:', data);
});
Neste exemplo:
utf8
é passado para garantir que o conteúdo do arquivo seja lido como texto. Se omitido, os dados serão retornados como um buffer;- A função de callback (
(err, data) => { ... }
) lida com o erro e exibe o conteúdo.
b. Leitura síncrona
A leitura síncrona é feita com fs.readFileSync
. Essa abordagem bloqueia o fluxo do código até que o arquivo seja lido, sendo útil para scripts pequenos ou quando você precisa da informação imediatamente.
const fs = require('fs');
try {
const data = fs.readFileSync('exemplo.txt', 'utf8');
console.log('Conteúdo do arquivo:', data);
} catch (err) {
console.error('Erro ao ler o arquivo:', err);
}
2. Escrevendo arquivos
a. Escrita assíncrona
Para escrever em um arquivo de maneira assíncrona, use fs.writeFile
. Se o arquivo já existir, ele será substituído, então tome cuidado para não sobrescrever dados importantes.
const fs = require('fs');
const conteudo = 'Este é um exemplo de escrita em arquivo.';
fs.writeFile('novoArquivo.txt', conteudo, 'utf8', (err) => {
if (err) {
console.error('Erro ao escrever no arquivo:', err);
return;
}
console.log('Arquivo escrito com sucesso!');
});
b. Escrita síncrona
Para escrita síncrona, utilize fs.writeFileSync
. Isso garante que o arquivo será completamente escrito antes de o código prosseguir.
const fs = require('fs');
const conteudo = 'Escrevendo de maneira síncrona.';
try {
fs.writeFileSync('novoArquivoSync.txt', conteudo, 'utf8');
console.log('Arquivo escrito com sucesso!');
} catch (err) {
console.error('Erro ao escrever no arquivo:', err);
}
3. Acrescentando conteúdo ao arquivo
Para adicionar conteúdo sem substituir o conteúdo existente, use fs.appendFile
para uma abordagem assíncrona ou fs.appendFileSync
para uma abordagem síncrona.
Exemplo com appendFile
const fs = require('fs');
const novoConteudo = '\nConteúdo adicional.';
fs.appendFile('novoArquivo.txt', novoConteudo, 'utf8', (err) => {
if (err) {
console.error('Erro ao adicionar conteúdo:', err);
return;
}
console.log('Conteúdo adicionado com sucesso!');
});
4. Exemplo completo: lendo e escrevendo
Veja um exemplo prático de leitura, modificação e regravação de um arquivo:
const fs = require('fs');
fs.readFile('exemplo.txt', 'utf8', (err, data) => {
if (err) {
console.error('Erro ao ler o arquivo:', err);
return;
}
const novoConteudo = data + '\nTexto adicional!';
fs.writeFile('exemplo.txt', novoConteudo, 'utf8', (err) => {
if (err) {
console.error('Erro ao escrever no arquivo:', err);
return;
}
console.log('Arquivo atualizado com sucesso!');
});
});
Outro exemplo prático
Os módulos têm as formas síncronas (lê o arquivo completamente para depois liberar o event loop – bom para arquivos pequenos) e assíncronas (ideal para arquivos muito grandes para não travar o processamento).
Veja abaixo exemplos de criação e leitura de arquivos:
Arquivo “arquivo.json”:
//exemplo de arquivo de configuração de banco de dados:
{
"db": {
"host": "localhost",
"port": 3306,
"user": "admin",
"pass": "123abc"
}
}
Arquivo “leitura.json”:
const fs = require('fs') //Faz um require em cima do módulo 'fs' (file system)
const caminho = __dirname + '\arquivo.json'
//Síncrono
const conteudo = fs.readFileSync(caminho, 'utf-8')
console.log(conteudo)
//Será mostrado:
{
"db": {
"host": "localhost",
"port": 3306,
"user": "admin",
"pass": "123abc"
}
}
//Assíncrono
/* É passada uma função callback após a leitura do arquivo para posterior tratamento.
O primeiro argumento é err (erro) e conteudo. Caso nenhum erro seja gerado, o conteúdo é lido: */
fs.readFile(caminho, 'utf-8', (err, conteudo) => {
const config = JSON.parse(conteudo)
//Utilizamos um template string para mostrar os conteúdos de host e port do arquivo "arquivo.json":
console.log(`${config.db.host}:${config.db.port}`)
})
//Também é possível simplificar os códigos acima desta forma:
const config = require('./arquivo.json')
console.log(config.db)
//Leitura de diretório:
fs.readdir(__dirname, (err, arquivos) => {
console.log('Conteúdo da pasta: ')
console.log(arquivos)
})
Para escrever arquivos:
const fs = require
//Objeto que será persistido (gravado) no disco:
const produto = {
nome: 'Computador',
valor: 2950.50,
desc: 0.9
}
//É preciso transformar o objeto em texto para transformá-lo depois no formato JSON:
fs.writeFile(__dirname + '/arquivoGerado.json', JSON.stringify(produto), err => {
//Utilizamos uma função callback (err) para verificar possíveis erros
//Se "err" for nulo (falso) então 'Arquivo salvo!' é mostrado (true):
console.log(err || 'Arquivo salvo!')
})
A manipulação de arquivos no Node.js é simples e versátil. Utilizar a versão síncrona ou assíncrona depende da necessidade de sua aplicação. No geral, a abordagem assíncrona é mais recomendada para manter a fluidez da aplicação.
Aprenda através de projetos reais e aulas práticas. São 20 cursos completos + cursos bônus. Grupos privados exclusivos, atualizações constantes e lives semanais.
Python, PHP, Java Script, CSS, Node, Angular JS, MySQL, Photoshop, Flutter, AWS, Apache e muito mais!
CLIQUE NA IMAGEM ABAIXO E CONFIRA MAIS DETALHES:
Dúvidas ou sugestões sobre como ler e escrever arquivos no Node? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
https://youtube.com/criandobits
Sobre o Autor
0 Comentários