O módulo fs do Node.js
O módulo fs
disponibiliza diversas funcionalidades úteis para acessar e interagir com o file system.
Não há necessidade de intalá-lo. Sendo parte do núcleo do Node.js, basta importar para poder usá-lo:
const fs = require('fs')
Feito isso, você tem acesso a todos os métodos dele, o que inclui:
fs.access()
: checa se o arquivo existe e se o Node.js pode acessá-lo com suas permissões atuaisfs.appendFile()
: acrescenta dados em um arquivo. Se o arquivo não existir, ele é criado.fs.chmod()
: muda as permissões de um arquivo especificado pelo nome que foi passado. Relacionado:fs.lchmod()
,fs.fchmod()
fs.chown()
: muda o proprietário e o grupo do arquivo especificado pelo nome que foi passado. Relacionado:fs.fchown()
,fs.lchown()
fs.close()
: fecha um descriptor de arquivofs.copyFile()
: copia um arquivofs.createReadStream()
: cria uma stream de arquivo para leiturafs.createWriteStream()
: cria uma stream de arquivo para escritafs.link()
: cria um novo hard link para um arquivofs.mkdir()
: cria um novo diretóriofs.mkdtemp()
: cria um novo diretório temporáriofs.open()
: define o file modefs.readdir()
: lê os conteúdos de um diretóriofs.readFile()
: lê os conteúdos de um arquivo. Relacionado:fs.read()
fs.readlink()
: lê o valor de um link simbólicofs.realpath()
: resolve caminhos relativos de arquivo com ponteiros (.
,..
) para o caminho completofs.rename()
: renomeia um arquivo ou pastafs.rmdir()
: deleta um diretóriofs.stat()
: retorna o status do arquivo identificado pelo nome que foi passado. Relacionado:fs.fstat()
,fs.lstat()
fs.symlink()
: cria um novo link simbólico para um arquivofs.truncate()
: trunca o arquivo identificado pelo nome que foi passado para o tamanho especificado. Relacionado:fs.ftruncate()
fs.unlink()
: remove um arquivo ou um link simbólicofs.unwatchFile()
: para de observar mudanças em um arquivofs.utimes()
: muda a timestamp do arquivo identificado pelo nome que foi passado. Relacionado:fs.futimes()
fs.watchFile()
: começa a observar muddanças em um arquivo. Relacionado:fs.watch()
fs.writeFile()
: escreve dados em um arquivo. Relacionado:fs.write()
Uma coisa peculiar sobre o módulo fs
é que todos os métodos são assíncronos por padrão, mas eles também podem rodar de forma síncrona adicionando Sync
no nome.
Por exemplo:
fs.rename()
fs.renameSync()
fs.write()
fs.writeSync()
Isso faz uma enorme diferença no fluxo da sua aplicação.
O Node.js 10 inclui suporte experimental para uma API baseada em promises
Por exemplo, vamos analisar o método fs.rename()
. A API assíncrona é usada com uma callback:
const fs = require('fs')fs.rename('before.json', 'after.json', err => {if (err) {return console.error(err)}// feito})
Uma API síncrona pode ser usada com um bloco de try/catch para tratar erros:
const fs = require('fs')try {fs.renameSync('before.json', 'after.json')// feito} catch (err) {console.error(err)}
A principal diferença aqui é que a execução do seu script no segundo exemplo vai bloquear a thread, até que a operação no arquivo seja bem-sucedida.