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 leitura
- r+: arquivo aberto para leitura e gravação
- rs: arquivo aberto para leitura no modo síncrono
- w: abrir arquivo para gravação
- a: abrir arquivo para gravar dados no final do arquivo
- a+: 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.
