Hoje falaremos sobre como trabalhar com o sistema de arquivos usando o Node.js, considere as operações básicas executadas com os arquivos. Tais operações incluem o seguinte:
- Criação de arquivo
- Ler arquivo
- Gravando dados em um arquivo
- Exclusão de arquivo
- Renomear arquivo
A necessidade de executar essas operações surge em uma variedade de situações.

Módulo FS
O Node.js possui um módulo padrão,
fs
(abreviação de File System), que fornece ferramentas de desenvolvedor para trabalhar com o sistema de arquivos. Você pode importá-lo para o projeto da seguinte maneira:
var fs = require('fs');
Os métodos deste módulo são apresentados em formas síncronas e assíncronas. As funções de retorno de chamada transmitidas para métodos assíncronos aceitam o objeto de erro como o primeiro parâmetro e os dados retornados quando a operação foi bem-sucedida como o segundo parâmetro. Considere um exemplo:
function fileHandler(){ fs.readFile('textFile.txt', 'utf8', (err, data) => { if(err) throw err; console.log(data); }); }
O método
.readFile()
, sobre o qual falaremos mais, destina-se à leitura de arquivos. Neste exemplo, a função de retorno de chamada possui dois parâmetros -
err
e
data
. Os erros que podem ocorrer ao tentar ler um arquivo caem no primeiro parâmetro; os dados obtidos após uma operação bem-sucedida estão no segundo parâmetro. Observe que
.readFile()
é um método assíncrono do módulo
fs
. Sua versão síncrona é chamada
.readFileSync()
. Uma abordagem semelhante é usada para nomear outros métodos de módulo.
Crie um novo arquivo
Vamos começar com um exemplo:
function fileHandler(){ fs.open('testFile.txt', 'w', (err) => { if(err) throw err; console.log('File created'); }); }
Aqui, o método
fs.open()
é usado para criar um novo arquivo. Leva um nome de arquivo como o primeiro argumento. Seu segundo argumento é uma bandeira que diz ao sistema exatamente o que queremos fazer com o arquivo. Nesse caso, esse é o sinalizador
w
(abreviação de escrita), que indica que queremos abrir o arquivo para gravação. O método
.open()
pode aceitar vários sinalizadores. Aqui estão alguns deles:
r
: abrir arquivo para leiturar+
: arquivo aberto para leitura e gravaçãors
: arquivo aberto para leitura no modo síncronow
: abrir arquivo para gravaçãoa
: abrir arquivo para gravar dados no final do arquivoa+
: abra o arquivo para ler e gravar dados no final do arquivo
Agora, antes de passar para o próximo exemplo, editaremos o arquivo
testFile.txt
recém-criado usando algum tipo de editor de texto. Adicione o seguinte texto a ele:
This is a test file. We're learning about Node.js File System. The End.
Gravando dados em um arquivo
Vamos falar sobre como adicionar algo a um arquivo:
function fileHandler(){ fs.appendFile('testFile.txt', ' This line is beyond the end.', (err) => { if(err) throw err; console.log('Data has been added!'); }); }
Aqui usamos o método
.appendFile()
para acrescentar dados ao final de um arquivo existente. Como primeiro argumento, esse método aceita o nome do arquivo, como o segundo - os dados que precisam ser adicionados ao final do arquivo. O terceiro argumento é, como sempre, uma função de retorno de chamada.
Depois que o código mostrado acima for executado com êxito, o conteúdo do arquivo ficará assim:
This is a test file. We're learning about Node.js File System. The End. This line is beyond the end.
Há outra maneira de gravar dados em um arquivo. Isso implica o uso do método
.writeFile()
. Este método é muito semelhante ao
.appendFile()
, mas tem uma diferença importante. O fato é que, usando o método
.appendFile()
, adicionamos novos dados ao arquivo após os dados que já estão nele. E ao usar o método
.writeFile()
, o conteúdo do arquivo é substituído por um novo. Vamos tentar este método:
function fileHandler(){ fs.writeFile('testFile.txt', "I'm the replacement you've been looking for.", (err) => { if(err) throw err; console.log('Data has been replaced!'); }); }
Após uma operação bem-sucedida, o arquivo conterá o seguinte texto:
I'm the replacement you've been looking for.
Como você pode ver, o conteúdo do arquivo é completamente substituído por um novo.
Ler arquivo
Para ler arquivos, o módulo
fs
fornece o método
.readFile()
, um exemplo do uso que já vimos. Leva o nome do arquivo como o primeiro parâmetro e a codificação como o segundo. O terceiro parâmetro é a função de retorno de chamada. Vamos tentar imprimir o conteúdo do arquivo
testFile.txt
no console usando este método:
function fileHandler(){ fs.readFile('testFile.txt', 'utf8', (err, data) => { if(err) throw err; console.log('--------- [File Data] ---------'); console.log(data); console.log('--------- [File Data] ---------'); }); }
É o que temos.
Arquivo de saída de dados para o consoleAgora vamos falar sobre renomear arquivos.
Renomear arquivo
Para renomear arquivos, use o método
.rename()
:
function fileHandler(){ fs.rename('testFile.txt', 'newTestFile.txt', (err) => { if(err) throw err; console.log('File renamed successfully!'); }); }
O primeiro argumento do método é o nome de um arquivo existente, o segundo é o novo nome desse arquivo. Após uma chamada bem-sucedida para esse método, o arquivo
testFile.txt
transforma em
newTestFile.txt
.
Exclusão de arquivo
Para excluir arquivos, use o método
.unlink()
:
function fileHandler(){ fs.unlink('newTestFile.txt', (err) => { if(err) throw err; console.log('File deleted successfully!'); }); }
Uma chamada bem-sucedida para esse método exclui o arquivo
newTestFile.txt
.
Sumário
Neste artigo, examinamos os conceitos básicos de trabalho com o sistema de arquivos no Node.js. Se você deseja dominar este tópico mais profundamente, consulte
este material no ciclo de publicação do Node.js., leia a
documentação do módulo
fs
e tente experimentar tudo o que aprender na prática.
Caros leitores! Você usa o módulo fs padrão ou algo mais para trabalhar com arquivos no Node.js.
