Neste artigo você aprenderá a como criar arquivos com Node.js – utilizando a biblioteca File System, de uma forma simples e intuitiva.

como criar arquivos node capa

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

Subscribe
Notify of
guest

5 Comentários
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
MARCELO

Obrigado Matheus. Me ajudou com dúvidas que eu tinha com esse conteúdo.

Battisti

opa Marcelo, tamo junto!

Bárbara Kellen

Muito Obrigada! Foi muito útil pra mim. Eu já tinha procurado por isso em toda parte.

Battisti

de nada Bárbara! =)

Guilherme

Eu usei o método readFile, porém ele salva um do lado do outro, tem algum comando pra fazer essa separação?