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:
: caminho para o arquivopath
: parâmetro opcional que representa configurações adicionais de leitura, como a codificaçãooptions
: função de callback que é executada após a leitura ser concluídacallback
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
Hello Programício!
Hello World!
Para ler o arquivo hello.txt
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()
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()
fs.writeFile(file, data[, options], callback)
Os parâmetros da função são:
: caminho para o arquivofile
: dados a serem gravadosdata
: objeto de configuração opcional com as seguintes propriedades:options
: codificação usada na escrita (padrão: "utf8")encoding
: modo de gravação como número (padrão: 0o666)mode
: um dos flags do sistema para abertura do arquivo (padrão:flag
para gravação)w
: booleano que indica se os dados devem ser gravados imediatamente (padrão: false)flush
: objetosignal
que permite cancelar a gravaçãoAbortSignal
: 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.callback
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()
fs.writeFileSync("hello2.txt", "Hello Work...\n")
Esses métodos sobrescrevem o arquivo por padrão. Para adicionar dados ao arquivo, usamos fs.appendFile()
fs.appendFileSync()
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
true
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()
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()
fs.unlinkSync("hello.txt")
Também podemos usar a função assíncrona fs.unlink()
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()
mkdirSync()
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()
rmdirSync()
const fs = require("fs");
fs.rmdir("test", (error) => {
if (error) return console.log(error);
console.log("Diretório deletado");
});