Trabalhando com o sistema de arquivos no Node.js: guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com o sistema de arquivos no Node.js: guia completo



No desenvolvimento web moderno, a capacidade de trabalhar eficientemente com o sistema de arquivos é uma das habilidades-chave de um desenvolvedor backend. O Node.js fornece um módulo fs (File System) poderoso e flexível, que permite realizar todas as operações principais com arquivos e diretórios: leitura, escrita, exclusão, renomeação e muito mais. Neste artigo, vamos detalhar como trabalhar com o sistema de arquivos no Node.js, abordar métodos síncronos e assíncronos, e também estudar o trabalho com caminhos.



Importando o módulo fs e princípios básicos



Para começar a trabalhar com o sistema de arquivos no Node.js, é necessário importar o módulo embutido fs. Isso é feito com uma linha de código:



const fs = require('fs');


O módulo fs fornece métodos tanto síncronos quanto assíncronos. Os métodos assíncronos geralmente aceitam uma função de callback como último argumento e são preferíveis para código de produção, pois não bloqueiam o event loop. Os métodos síncronos terminam com Sync e podem ser úteis na inicialização da aplicação ou em scripts.



Além disso, a partir do Node.js 10, está disponível o trabalho com fs/promises — uma versão dos métodos que retornam promises:



const fs = require('fs/promises');


Neste artigo, usaremos predominantemente a abordagem assíncrona com promises, pois é a mais moderna e conveniente.



Leitura de arquivos no Node.js



A leitura de arquivos é uma das operações mais comuns. Vamos considerar três maneiras principais.



Leitura do arquivo inteiro (assíncrona)



O método fs.readFile() lê o conteúdo do arquivo completamente para a memória. Isso é conveniente para arquivos pequenos.



const fs = require('fs/promises');

async function readFileExample() { try { const data = await fs.readFile('example.txt', 'utf8'); console.log('Conteúdo do arquivo:', data); } catch (err) { console.error('Erro ao ler o arquivo:', err); }}

readFileExample();


Leitura de arquivo linha por linha (leitura em stream)



Para arquivos grandes, é melhor usar streams ou ler o arquivo linha por linha com readline:



const fs = require('fs');const readline = require('readline');

async function readFileLineByLine() { const fileStream = fs.createReadStream('large-file.txt'); const rl = readline.createInterface({ input: fileStream, crlfDelay: Infinity });

for await (const line of rl) { console.log('Linha:', line); }}

readFileLineByLine();


Leitura síncrona



Se você precisa ler o arquivo imediatamente e está disposto a bloquear a execução:



const fs = require('fs');

try { const data = fs.readFileSync('example.txt', 'utf8'); console.log(data);} catch (err) { console.error(err);}


Escrita e atualização de arquivos



O Node.js fornece vários métodos para escrever dados em arquivos.



Escrita em arquivo (sobrescrita)



O método fs.writeFile() cria um novo arquivo ou sobrescreve um existente:



const fs = require('fs/promises');

async function writeFileExample() { try { await fs.writeFile('output.txt', 'Olá, mundo!', 'utf8'); console.log('Arquivo escrito com sucesso'); } catch (err) { console.error('Erro de escrita:', err); }}

writeFileExample();


Adicionar dados ao final do arquivo



Se precisar adicionar dados sem excluir os existentes, use fs.appendFile():



const fs = require('fs/promises');

async function appendToFile() { try { await fs.appendFile('log.txt', `Nova entrada: ${new Date()}`); console.log('Dados adicionados'); } catch (err) { console.error('Erro:', err); }

Blogs

Book Recommendations