Atualizado: 02/01/2025

Trabalhando com Arquivos - Node.js

Para trabalhar com arquivos no Node.js, utilizamos o módulo é necessário instalar o fs. Vamos ver como utilizá-lo.

Leitura de Arquivos

Para a leitura assíncrona de arquivos, usamos a função fs.readFile:

fs.readFile(path[, options], callback)

A função aceita até três parâmetros:

  • path: caminho para o arquivo

  • options: parâmetro opcional que representa configurações adicionais de leitura, como a codificação

  • callback: função de callback que é executada após a leitura ser concluída

    O callback possui a seguinte estrutura:

    callback(error, data)

    O primeiro parâmetro contém informações sobre o erro (se houver) e o segundo contém os dados lidos.

Suponha que na pasta do projeto exista um arquivo de texto hello.txt com o seguinte conteúdo:

Hello Programício!
Hello World!

Para ler o arquivo hello.txt, criamos um arquivo app.js na pasta do projeto com o seguinte código:

const fs = require("fs");
 
fs.readFile("hello.txt", function(error, data) {
    if(error) { // se ocorrer um erro
        return console.log(error);
    }
    console.log(data.toString()); // exibe os dados lidos
});
console.log("Leitura assíncrona de arquivos");

Apesar da função fs.readFile() ser chamada primeiro, como ela é assíncrona, não bloqueia o fluxo de execução. Portanto, seu resultado é exibido no final.

c:\app> node app.js
Leitura assíncrona de arquivos
Hello Programício!
Hello World!

Para a leitura síncrona do arquivo, usamos a função fs.readFileSync():

fs.readFileSync(path[, options])

O método recebe o caminho do arquivo e, opcionalmente, a codificação. A função retorna os dados lidos.

Exemplo de uso:

const fs = require("fs");
 
const data = fs.readFileSync("hello.txt");
console.log(data.toString()); // exibe os dados lidos
console.log("Leitura síncrona de arquivos");

Saída do console:

c:\app> node app.js
Hello Programício!
Hello World! 
Leitura síncrona de arquivos

Escrita de Arquivos

Para a escrita assíncrona de arquivos, utilizamos a função fs.writeFile(), que aceita quatro parâmetros:

fs.writeFile(file, data[, options], callback)

Os parâmetros da função são:

  • file: caminho para o arquivo

  • data: dados a serem gravados

  • options: objeto de configuração opcional com as seguintes propriedades:

    • encoding: codificação usada na escrita (padrão: "utf8")

    • mode: modo de gravação como número (padrão: 0o666)

    • flag: um dos flags do sistema para abertura do arquivo (padrão: w para gravação)

    • flush: booleano que indica se os dados devem ser gravados imediatamente (padrão: false)

    • signal: objeto AbortSignal que permite cancelar a gravação

  • callback: função chamada após a gravação. Se houver um erro, o primeiro parâmetro da função conterá informações sobre o erro.

Exemplo de gravação de arquivo:

const fs = require("fs");

const data = "Hello Node.js\n";
      
fs.writeFile("hello2.txt", data, function(error) {
    if(error) { // se ocorrer um erro
        return console.log(error);
    }
    console.log("Arquivo gravado com sucesso");
});

Para a escrita síncrona, usamos a função fs.writeFileSync(), que aceita o caminho do arquivo e os dados a serem gravados:

fs.writeFileSync("hello2.txt", "Hello Work...\n")

Esses métodos sobrescrevem o arquivo por padrão. Para adicionar dados ao arquivo, usamos fs.appendFile() e fs.appendFileSync(), que aceitam os mesmos parâmetros:

const fs = require("fs");

// adição síncrona
fs.appendFileSync("hello2.txt", "Hello world\n");

// adição assíncrona
fs.appendFile("hello2.txt", "Hello walk\n", function(error) {
    if(error) return console.log(error); // se ocorrer um erro
                  
    console.log("Gravação concluída");
});

Como alternativa, podemos configurar o flag de adição no objeto de configuração com o flag a:

fs.writeFile("hello2.txt", "Hello all\n", {flag: "a"}, function(error){
  if(error) return console.log(error); // se ocorrer um erro
               
  console.log("Gravação concluída");
});

Obtendo Informações sobre Arquivos

Para obter informações sobre um arquivo de forma assíncrona, usamos a função stat():

fs.stat(path[, options], callback)

O primeiro parâmetro representa o caminho do arquivo. O segundo, opcional, é um objeto onde a propriedade bigint armazena um valor booleano indicando se os dados devem ser retornados como números (quando true). O terceiro parâmetro é uma função de callback que aceita dois parâmetros:

callback(error, stats)

O primeiro parâmetro contém informações sobre o erro (se houver), e o segundo contém as estatísticas do arquivo. Por exemplo, para obter a estatística de um arquivo:

const fs = require("fs");
 
fs.stat("hello.txt", (error, stats) => {  
    if (error) return console.error(error);
    console.log(stats.isFile());        // true  
    console.log(stats.isDirectory());   // false  
    console.log(stats);
});

A estatística obtida é um objeto com várias propriedades, conforme mostrado abaixo:

c:\app> node app.js
true
false
Stats {
  dev: 16777220,
  mode: 33188,
  nlink: 1,
  uid: 501,
  gid: 20,
  rdev: 0,
  blksize: 4096,
  ino: 8648323536,
  size: 31,
  blocks: 8,
  atimeMs: 1700671481153.5369,
  mtimeMs: 1700667050455.9146,
  ctimeMs: 1700667050455.9146,
  birthtimeMs: 1643908248703.2,
  atime: 2023-11-22T16:44:41.154Z,
  mtime: 2023-11-22T15:30:50.456Z,
  ctime: 2023-11-22T15:30:50.456Z,
  birthtime: 2022-02-03T17:10:48.703Z
}

Para obter as estatísticas de um arquivo de forma síncrona, usamos o método statSync(), que recebe o caminho do arquivo e retorna um objeto com as estatísticas:

const fs = require("fs");
 
const stats = fs.statSync("hello2.txt")
console.log(stats.isFile());        // true  
console.log(stats.isDirectory());   // false  
console.log(stats);

Removendo Arquivos

Para remover um arquivo de forma síncrona, usamos a função fs.unlinkSync(), que recebe o caminho do arquivo a ser removido:

fs.unlinkSync("hello.txt")

Também podemos usar a função assíncrona fs.unlink(), que recebe o caminho do arquivo e uma função de callback executada após a remoção:

fs.unlink("hello.txt", (error) => {
  if (error) return console.log(error); // se ocorrer um erro 
  console.log("Arquivo deletado");
});

Trabalhando com Diretórios

Para criar diretórios, usamos as funções mkdir() (assíncrona) e mkdirSync() (síncrona). Elas recebem o nome do diretório. O método assíncrono aceita uma função de callback executada após a criação do diretório:

const fs = require("fs");
 
fs.mkdir("test", (error) => {  
    if (error) return console.log(error);
    console.log("Diretório criado");
});

Para remover um diretório, usamos as funções rmdir() (assíncrona) e rmdirSync() (síncrona). Elas recebem o nome do diretório. O método assíncrono aceita uma função de callback executada após a remoção do diretório:

const fs = require("fs");
 
fs.rmdir("test", (error) => {  
    if (error) return console.log(error);
    console.log("Diretório deletado");
});
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com