Trabalhando com o sistema de arquivos em JavaScript (Node.js): guia completo para iniciantes
Trabalhar com o sistema de arquivos é uma das tarefas essenciais ao criar aplicações de servidor, scripts de automação ou utilitários para processamento de dados. Em JavaScript (Node.js), existe o módulo embutido fs (File System) para isso. Este artigo apresentará os fundamentos do trabalho com arquivos e pastas no Node.js, mostrará como ler, escrever, criar e excluir arquivos, além de explicar a diferença entre métodos síncronos e assíncronos.
O que é o módulo fs no Node.js?
O módulo fs fornece uma API para interagir com o sistema de arquivos do sistema operacional. Ele permite realizar operações como:
- Leitura do conteúdo de arquivos
- Escrita de dados em arquivos
- Criação e exclusão de diretórios
- Renomeação e cópia de arquivos
- Verificação da existência de arquivos
- Obtenção de informações sobre arquivos (estatísticas)
Para começar a usar o módulo fs, você precisa importá-lo no seu código:
const fs = require('fs');Todos os métodos do módulo fs estão disponíveis em três variantes: síncrona (com o sufixo Sync), assíncrona com callbacks e assíncrona baseada em promessas (usando fs.promises). Neste guia, focaremos na abordagem moderna usando async/await.
Leitura de arquivos no Node.js
A maneira mais simples de ler o conteúdo de um arquivo é usar o método readFile do fs.promises. Veja um exemplo:
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 (error) { console.error('Erro ao ler o arquivo:', error.message); }}
readFileExample();Neste exemplo:
- Importamos
fs.promises— a versão do módulo que retorna promessas. - A função
readFilerecebe o caminho do arquivo e a codificação (neste caso,'utf8'). - Se o arquivo não existir, um erro será lançado, que tratamos no bloco
catch.
Se você precisar ler um arquivo de forma síncrona (em scripts simples), use readFileSync:
const fs = require('fs');
try { const data = fs.readFileSync('example.txt', 'utf8'); console.log(data);} catch (error) { console.error(error.message);}Importante: Métodos síncronos bloqueiam a execução do código até que a operação seja concluída. Em aplicações de servidor (por exemplo, no Express), sempre use métodos assíncronos para não bloquear o processamento de outras requisições.
Escrita de dados em arquivos
Para escrever dados em um arquivo, usa-se o método writeFile. Se o arquivo existir, seu conteúdo será sobrescrito. Se o arquivo não existir, ele será criado automaticamente.
const fs = require('fs').promises;
async function writeFileExample() { try { const content = 'Olá, mundo! Esta é uma gravação de teste.'; await fs.writeFile('output.txt', content, 'utf8'); console.log('Arquivo gravado com sucesso!'); } catch (error) { console.error('Erro de gravação:', error.message); }}
writeFileExample();Se você quiser adicionar dados ao final de um arquivo existente (sem sobrescrevê-lo), use o método appendFile:
const fs = require('fs').promises;
async function appendToFile() { try { await fs.appendFile('log.txt', `Nova entrada: ${new Date()}`, 'utf8'); console.log('Dados adicionados ao final do arquivo'); } catch (error) { console.error('Erro:', error.message);\