Neste artigo você aprenderá a como criar arquivos com Node.js – utilizando a biblioteca File System, de uma forma simples e intuitiva.
Fala programador(a), beleza? Bora aprender mais sobre Node e como manusear arquivos com esta tecnologia!
O que é File System?
O File System é um módulo local do Node.js, que tem como principal objetivo realizar operações com arquivos e diretórios
Ou seja: criar, atualizar, deletar, renomear e qualquer outra operação que você pode imaginar
Podemos utilizá-lo da seguinte forma:
const fs = require('fs');
Como dito anteriormente ele é um módulo local, a característica dos módulos locais é que você pode chamá-los em qualquer arquivo do seu projeto
Pois todos eles vêm instalados com o Node.js, então você não precisa se preocupar com o setup
Feita a importanção, como exibida acima, você está apto a utilizar o File System
Além disso, como característica do Node, os métodos da biblioteca FS possuem a versão síncrona e assíncrona
De uma forma que a versão síncrona vai esperar todos os processos serem executados para executar a próxima linha de código, já a assíncrona tem a promessa do non-blocking
Que nada mais é do que partir para a próxima parte, esperando a resposta destas chamadas assíncronas
Vamos ver as duas abordagens no método que escreve arquivos com Node.js, o writeFile
Obs: você pode ver a documentação completa do File System aqui.
Como criar arquivos com Node – writeFile
Para a criação de arquivos com Node vamos utilizar a biblioteca File System, como mencionado, mas mais especificamente o seu método writeFile
Para utilizar o writeFile, você pode fazer assim:
const data = 'Testando a criação de arquivos'; fs.writeFile('arquivo.txt', data, (err) => { if (err) throw err; console.log('O arquivo foi criado!'); });
Esta forma é a assíncrona, veja que inserimos uma função no método, que é chamada de callback
Essa função somente será executada quando a criação do arquivo.txt for realizada ou algum erro aconteça neste processo
Obs: A função callback é uma característica das chamadas assíncronas!
Voltando ao método: o primeiro argumento que vemos no writeFile é o nome do arquivo que será criado
Podemos inserir também o path, ou seja, o caminho em que o arquivo ficará
E o segundo argumento é o conteúdo do arquivo, que inserimos na variável data, apenas um simples texto para servir de exemplo
Mas você pode criar qualquer extensão de arquivo e também com qualquer estrutura de dados, um arquivo .json com uma estrutura de JSON é perfeitamente válido
Por fim, teremos a callback function que só será executada ao fim do método
Veja que temos um argumento chamado err, este argumento contém o erro que pode ser gerado caso algo falhe na criação do arquivo, e pelo if dentro da callback, será automaticamente executado caso haja algo neste argumento
Caso não haja, tudo prossegue normalmente e a mensagem de sucesso por meio do console.log é lançada para o usário
Importante mencionar que a callback está escrita com uma arrow function, uma funcionalidade da versão ES6 do JavaScript para escrever funções, se você quer saber mais sobre ela veja o nosso outro artigo aqui.
Tome cuidado!
Segundo a própria documentação, não é seguro utilizar o writeFile diversas vezes no mesmo arquivo sem esperar pelo callback
Podem acontecer inconsistências entre o que você quer salvar e o que estará no arquivo
Para este fim o recomendado é escrever em arquivos em Stream, utilizando o método createWriteStream
E a versão síncrona?
Como dito anteriormente, o método writeFile também existe na versão síncrona
Para este método não teremos a função callback, pois justamente o Node executará o método todo para ir até a próxima linha de código
Podemos dizer então que o sistema ficará a esperar da resolução do método writeFileSync para prosseguir
Veja a sua utilização:
const data = 'testando sync'; fs.writeFileSync('arquivo.txt', data);
Desta maneira a posição dos argumentos é a mesma, primeiramente passamos o diretório alvo, com o nome do arquivo a ser criado
E depois os dados que este arquivo terá após a sua criação
Lembrando que a ação de criar arquivos comumente é chamada de escrever arquivos ou escrever em arquivos ( em inglês: write file )
Que justamente constitui o próprio nome do método, seja síncrono ou assíncrono
Síncrono ou assíncrono? Qual utilizar?
A discussão é bem maior que você pode imaginar, mas há alguns pontos específicos que podem te ajudar a escolher qual abordagem utilizar
Por exemplo ao lidar com arquivos muito grandes, seja em escrita ou leitura
É aconselhado utilizar a forma assíncrona para não bloquear a aplicação completamente enquanto o arquivo é lido
Mesma abordagem caso você precisasse escrever grandes quantidades de texto em um arquivo
Como ler o conteúdo de um arquivo
Até agora vimos como criar arquivos com Node ou escrever, como você quiser chamar 😀
Mas e se precisarmos ler um arquivo? Qual método utilizar?
Mais uma vez podemos utilizar métodos síncronos ou assíncronos, e o método para lidar com esta ação é o readFile
Veja na prática:
fs.readFile('arquivo.txt', (err, data) => { if (err) throw err; console.log(data); });
No readFile a situação é quase a mesma que no writeFile, precisamos passar o path do arquivo, ou seja, o caminho
E daí receberemos dois argumentos, o erro e os dados do arquivo
Novamente podemos imprimir os erros caso o programa falhe em ler o arquivo, porém caso seja um sucesso podemos utilizar os dados como quisermos
Perceba que este método acima é o síncrono, então temos a presença da callback com a arrow function, que será executada ao fim do processo de readFile
Já a versão assíncrona é mais simples ainda:
const data = fs.readFileSync('arquivo.txt');
Desta maneira é preciso atribuir o método a uma variável, para que os dados sejam inseridos nela
Assim podemos lidar como quisermos com esta resposta do método readFileSync
E estas são duas formas possíveis para ler arquivos com o Node
Porém mais uma vez é válida a recomendação do Stream, caso o arquivo seja muito grande utilize esta outra abordagem para ler o mesmo
Conclusão
Neste artigo vimos como criar arquivos com Node ou escrever arquivos com o Node, como dito antes os dois termos são utilizados
O método writeFile foi apresentado, bem como sua estrutura e utilização
Esta é a forma assíncrona de escrever ou criar arquivos com Node, para utilizar a forma síncrona o método da biblioteca File System é o writeFileSync
Cada uma das abordagens tem a sua utilização, cabe você analisar o que o seu software pede a cada vez que precisa escrever um arquivo
Confira também nosso catálogo de cursos gratuitos, com aulas semanais no YouTube
Obrigado Matheus. Me ajudou com dúvidas que eu tinha com esse conteúdo.
opa Marcelo, tamo junto!
Muito Obrigada! Foi muito útil pra mim. Eu já tinha procurado por isso em toda parte.
de nada Bárbara! =)
Eu usei o método readFile, porém ele salva um do lado do outro, tem algum comando pra fazer essa separação?