English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
O Node FS é um módulo integrado do Node.js que pode ajudar você a lidar com arquivos e operá-los.
Usando o Node FS, você pode executar as seguintes operações em arquivos:
Ler arquivo
Criar ou sobrescrever arquivo
Atualizar arquivo
删除文件
Renomear arquivo
O Node.js oferece um conjunto de API de operação de arquivo semelhante ao padrão UNIX (POSIX).
A sintaxe de importação do módulo de sistema de arquivos (fs) do Node é como mostrado a seguir:
var fs = require("fs")
Todos os métodos do módulo de sistema de arquivos do Node.js (módulo fs) têm versões assíncronas e síncronas, por exemplo, as funções de leitura de conteúdo de arquivo têm fs.readFile() assíncrono e fs.readFileSync() síncrono.
O último parâmetro da função do método assíncrono é a função de chamada de volta, o primeiro parâmetro da função de chamada de volta contém informações de erro (error).
Recomenda-se usar métodos assíncronos, pois eles têm melhor desempenho e velocidade em comparação com métodos síncronos, além de não bloquear.
Criar arquivo input.txt, o conteúdo é o seguinte:
Endereço do site do tutorial básico: pt.oldtoolbag.com Exemplo de leitura de arquivo
Criar arquivo file.js, o código é o seguinte:
var fs = require("fs"); // Leitura assíncrona fs.readFile('input.txt', function(err, data) { if (err) { return console.error(err); } console.log("Leitura assíncrona: "); + data.toString()); }); // Leitura síncrona var data = fs.readFileSync('input.txt'); console.log("Leitura síncrona: "); + data.toString()); console.log("Execução do programa concluída.");
O resultado da execução do código acima é o seguinte:
$ node file.js Leitura síncrona: Endereço do site do tutorial básico: pt.oldtoolbag.com Exemplo de leitura de arquivo Execução do programa concluída. Leitura assíncrona: Endereço do site do tutorial básico: pt.oldtoolbag.com Exemplo de leitura de arquivo
A seguir, vamos entender melhor os métodos do sistema de arquivos do Node.js.
A seguir está o formato de sintaxe para abrir um arquivo em modo assíncrono:
fs.open(path, flags[, mode], callback)
Instrução de uso dos parâmetros conforme abaixo:
path - Caminho do arquivo.
flags - Comportamento de abertura de arquivo. Valores específicos podem ser encontrados no texto a seguir.
mode - Definir o modo de arquivo (permissões), a permissão padrão de criação de arquivo é 0666(leitura, escrita).
callback - Função de callback, com dois parâmetros como: callback(err, fd).
Os valores do parâmetro flags podem ser os seguintes:
Flag | Descrição |
---|---|
r | Abre o arquivo em modo de leitura. Se o arquivo não existir, lança uma exceção. |
r+ | Abre o arquivo em modo de leitura e escrita. Se o arquivo não existir, lança uma exceção. |
rs | Ler o arquivo de forma síncrona. |
rs+ | Ler e escrever no arquivo de forma síncrona. |
w | Abre o arquivo em modo de escrita, cria o arquivo se não existir. |
wx | semelhante a 'w', mas se o caminho do arquivo existir, a escrita falhará. |
w+ | Abre o arquivo em modo de leitura e escrita, cria o arquivo se não existir. |
wx+ | semelhante a 'w+, mas se o caminho do arquivo existir, a leitura e escrita falharão. |
a | Abre o arquivo em modo de escrita anexada, cria o arquivo se não existir. |
ax | semelhante a 'a', mas se o caminho do arquivo existir, a anexação de arquivo falhará. |
a+ | Abre o arquivo em modo de leitura anexada, cria o arquivo se não existir. |
ax+ | semelhante a 'a+, mas se o caminho do arquivo existir, a leitura anexada falhará. |
A seguir criamos o arquivo file.js e abrimos o arquivo input.txt para leitura e escrita, o código é o seguinte:
var fs = require("fs"); // Abertura assíncrona de arquivo console.log("Preparando para abrir arquivo!"); fs.open('input.txt', 'r+', function(err, fd) { if (err) { return console.error(err); } console.log("Arquivo aberto com sucesso!"); });
O resultado da execução do código acima é o seguinte:
$ node file.js 准备打开文件! 文件打开成功!
A seguir está o formato de sintaxe para obter informações de arquivo de forma assíncrona:
fs.stat(path, callback)
Instrução de uso dos parâmetros conforme abaixo:
path - Caminho do arquivo.
callback - Função de callback, com dois parâmetros como: (err, stats), stats é um objeto fs.Stats.
Após a execução de fs.stat(path), uma instância da classe Stats será retornada para a função de callback. Pode-se usar os métodos fornecidos pela classe stats para determinar as propriedades do arquivo. Por exemplo, determinar se é um arquivo:
var fs = require('fs'); fs.stat('/Users/liuht/code/itbilu/demo/fs.js', function (err, stats) { console.log(stats.isFile()); //true )
Os métodos da classe stats incluem:
Método | Descrição |
---|---|
stats.isFile() | Se for um arquivo, retorna true; caso contrário, retorna false. |
stats.isDirectory() | Se for um diretório, retorna true; caso contrário, retorna false. |
stats.isBlockDevice() | Se for um dispositivo de bloco, retorna true; caso contrário, retorna false. |
stats.isCharacterDevice() | Se for um dispositivo de caractere, retorna true; caso contrário, retorna false. |
stats.isSymbolicLink() | Se for link simbólico retorna true, caso contrário retorna false. |
stats.isFIFO() | Se for FIFO, retorna true, caso contrário retorna false. FIFO é um tipo especial de pipe de comando no UNIX. |
stats.isSocket() | Se for Socket retorna true, caso contrário retorna false. |
A seguir, criamos o arquivo file.js, conforme mostrado a seguir:
var fs = require("fs"); console.log("Preparando para abrir arquivo!"); fs.stat('input.txt', function(err, stats) { if (err) { return console.error(err); } console.log(stats); console.log("Sucesso na leitura das informações do arquivo!"); // Detecção do tipo de arquivo console.log("É um arquivo (isFile) ? " + stats.isFile()); console.log("É um diretório (isDirectory) ? " + stats.isDirectory()); });
O resultado da execução do código acima é o seguinte:
$ node file.js 准备打开文件! { dev: 16777220, mode: 33188, nlink: 1, uid: 501, gid: 20, rdev: 0, blksize: 4096, ino: 40333161, size: 61, blocks: 8, atime: Seg Mon Sep 07 2015 17:43:55 GMT+0800 (CST), mtime: Seg Mon Sep 07 2015 17:22:35 GMT+0800 (CST), ctime: Seg Mon Sep 07 2015 17:22:35 GMT+0800 (CST)} Sucesso na leitura das informações do arquivo! É um arquivo (isFile) ? true É um diretório (isDirectory) ? false
A seguir está o formato de sintaxe para escrita assíncrona de arquivo:
fs.writeFile(file, data[, options], callback)
O writeFile abre diretamente o arquivo por padrão é w O modo, portanto, se o arquivo existir, o conteúdo escrito pelo método writeFile substituirá o conteúdo antigo do arquivo.
Instrução de uso dos parâmetros conforme abaixo:
file - O nome do arquivo ou o descritor do arquivo.
data - Os dados a serem escritos no arquivo, podem ser String (string) ou objeto Buffer (buffer).
options - Este parâmetro é um objeto que contém {encoding, mode, flag}. A codificação padrão é utf8, o modo é 0666 , o flag é 'w'
callback - A função de callback, contém apenas o parâmetro de erro (err), e retorna ao falhar na escrita.
A seguir, criamos o arquivo file.js, conforme mostrado a seguir:
var fs = require("fs"); console.log("Preparando para escrever arquivo"); fs.writeFile('input.txt', 'Sou o conteúdo escrito por fs.writeFile', function(err) { if (err) { return console.error(err); } console.log("Escrita de dados bem-sucedida!"); console.log("--------Sou uma linha divisória-------------") console.log("Ler dados escritos!"); fs.readFile('input.txt', function(err, data) { if (err) { return console.error(err); } console.log("Leitura assíncrona de dados do arquivo: ", + data.toString()); }); });
O resultado da execução do código acima é o seguinte:
$ node file.js Preparando para escrever arquivo Escrita de dados bem-sucedida! --------Sou uma linha divisória------------- Ler dados escritos! Leitura assíncrona de dados do arquivo: sou o conteúdo do arquivo escrito através de fs.writeFile
A seguir está o formato de sintaxe para ler arquivo em modo assíncrono:
fs.read(fd, buffer, offset, length, position, callback)
Este método usa o descriptor de arquivo para ler o arquivo.
Instrução de uso dos parâmetros conforme abaixo:
fd - Descriptor de arquivo retornado pelo método fs.open().
buffer - Buffer de dados para escrita.
offset - Deslocamento de escrita no buffer.
length - Número de bytes a serem lidos do arquivo.
position - Posição de leitura do arquivo, se o valor de position for null, será lido a partir da posição atual do ponteiro do arquivo.
callback - função de callback, com três parâmetros err, bytesRead, buffer, err para informações de erro, bytesRead para o número de bytes lidos, buffer para o objeto de buffer.
input.txt 文件内容为:
Endereço do site do tutorial básico: pt.oldtoolbag.com
A seguir, criamos o arquivo file.js, conforme mostrado a seguir:
var fs = require("fs"); var buf = new Buffer.alloc(1024); console.log("Preparando para abrir arquivo existente!"); fs.open('input.txt', 'r+', function(err, fd) { if (err) { return console.error(err); } console.log("Arquivo aberto com sucesso!"); console.log("Preparando para ler arquivo:"); fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){ if (err) { console.log(err); } console.log(bytes + "Bytes lidos"); // 仅输出读取的字节 if (bytes > 0) { console.log(buf.slice(0, bytes).toString()); } }); });
O resultado da execução do código acima é o seguinte:
$ node file.js Preparando para abrir arquivo existente! 文件打开成功! Preparando para ler arquivo: 42 Bytes lidos Endereço do site do tutorial básico: pt.oldtoolbag.com
A seguir está o formato de sintaxe para fechar arquivo em modo assíncrono:
fs.close(fd, callback)
Este método usa o descriptor de arquivo para ler o arquivo.
Instrução de uso dos parâmetros conforme abaixo:
fd - Descriptor de arquivo retornado pelo método fs.open().
callback - Função de callback, sem parâmetros.
input.txt 文件内容为:
Endereço do site do tutorial básico: pt.oldtoolbag.com
A seguir, criamos o arquivo file.js, conforme mostrado a seguir:
var fs = require("fs"); var buf = new Buffer.alloc(1024); console.log("Preparando para abrir arquivo!"); fs.open('input.txt', 'r+', function(err, fd) { if (err) { return console.error(err); } console.log("Arquivo aberto com sucesso!"); console.log("Preparando para ler arquivo!"); fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){ if (err) { console.log(err); } // 仅输出读取的字节 if (bytes > 0) { console.log(buf.slice(0, bytes).toString()); } // 关闭文件 fs.close(fd, function(err){ if (err) { console.log(err); } console.log("Arquivo fechado com sucesso"); }); }); });
O resultado da execução do código acima é o seguinte:
$ node file.js 准备打开文件! 文件打开成功! Preparando para ler arquivo! Endereço do site do tutorial básico: pt.oldtoolbag.com 文件关闭成功
A seguir está o formato de sintaxe para cortar arquivos em modo assíncrono:
fs.ftruncate(fd, len, callback)
Este método usa o descriptor de arquivo para ler o arquivo.
Instrução de uso dos parâmetros conforme abaixo:
fd - Descriptor de arquivo retornado pelo método fs.open().
len - Tamanho de corte do conteúdo do arquivo.
callback - Função de callback, sem parâmetros.
input.txt 文件内容为:
site:pt.oldtoolbag.com
A seguir, criamos o arquivo file.js, conforme mostrado a seguir:
var fs = require("fs"); var buf = new Buffer.alloc(1024); console.log("Preparando para abrir arquivo!"); fs.open('input.txt', 'r+', function(err, fd) { if (err) { return console.error(err); } console.log("Arquivo aberto com sucesso!"); 10字节内的文件内容,超出部分将被去除。 // 截取文件 fs.ftruncate(fd, 10, function(err){ if (err) { console.log(err); } console.log("文件截取成功。"); console.log("读取相同的文件"); fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){ if (err) { console.log(err); } // 仅输出读取的字节 if (bytes > 0) { console.log(buf.slice(0, bytes).toString()); } // 关闭文件 fs.close(fd, function(err){ if (err) { console.log(err); } console.log("文件关闭成功!"); }); }); }); });
O resultado da execução do código acima é o seguinte:
$ node file.js 准备打开文件! 文件打开成功! 截取10字节内的文件内容,超出部分将被去除。 文件截取成功。 读取相同的文件 site:www.r 文件关闭成功
以下为删除文件的语法格式:
fs.unlink(path, callback)
Instrução de uso dos parâmetros conforme abaixo:
path - Caminho do arquivo.
callback - Função de callback, sem parâmetros.
input.txt 文件内容为:
site:pt.oldtoolbag.com
A seguir, criamos o arquivo file.js, conforme mostrado a seguir:
var fs = require("fs"); console.log("准备删除文件!"); fs.unlink('input.txt', function(err) { if (err) { return console.error(err); } console.log("文件删除成功!"); });
O resultado da execução do código acima é o seguinte:
$ node file.js 准备删除文件! 文件删除成功!
再去查看 input.txt 文件,发现已经不存在了。
以下为创建目录的语法格式:
fs.mkdir(path[, options], callback)
Instrução de uso dos parâmetros conforme abaixo:
path - Caminho do arquivo.
options 参数可以是:
recursive - 是否以递归的方式创建目录,默认为 false。
mode - 设置目录权限,默认为 0777.
callback - Função de callback, sem parâmetros.
A seguir, criamos o arquivo file.js, conforme mostrado a seguir:
var fs = require("fs"); // tmp 目录必须存在 console.log("创建目录 /tmp/test/"); fs.mkdir("/tmp/test/ if (err) { return console.error(err); } console.log("目录创建成功。"); });
O resultado da execução do código acima é o seguinte:
$ node file.js 创建目录 /tmp/test/ 目录创建成功。
可以添加 recursive: true 参数,不管创建的目录 /tmp 和 /tmp/a 是否存在:
fs.mkdir('/tmp/a/apple', { recursive: true }, (err) => { if (err) throw err; });
A seguir, o formato de sintaxe para ler diretório é:
fs.readdir(path, callback)
Instrução de uso dos parâmetros conforme abaixo:
path - Caminho do arquivo.
callback - Função de callback, a função de callback possui dois parâmetros err, files, err é a mensagem de erro, files é a lista de arrays de arquivos no diretório.
A seguir, criamos o arquivo file.js, conforme mostrado a seguir:
var fs = require("fs"); console.log("Ver /Pasta tmp fs.readdir("/tmp/",function(err, files){ if (err) { return console.error(err); } files.forEach(function(file){ console.log(file); }); });
O resultado da execução do código acima é o seguinte:
$ node file.js Ver /Pasta tmp input.out output.out test test.txt
A seguir, o formato de sintaxe para exclusão de diretório é:
fs.rmdir(path, callback)
Instrução de uso dos parâmetros conforme abaixo:
path - Caminho do arquivo.
callback - Função de callback, sem parâmetros.
A seguir, criamos o arquivo file.js, conforme mostrado a seguir:
var fs = require("fs"); // Antes de executar, crie um diretório vazio /tmp/Pasta test console.log("Preparar para excluir diretório /tmp/test"); fs.rmdir("/tmp/test", function(err){ if (err) { return console.error(err); } console.log("Ler /Pasta tmp fs.readdir("/tmp/",function(err, files){ if (err) { return console.error(err); } files.forEach(function(file){ console.log(file); }); }); });
O resultado da execução do código acima é o seguinte:
$ node file.js Preparar para excluir diretório /tmp/test Ler /Pasta tmp ……
A seguir, lista de métodos do módulo de arquivo do Node.js:
Número de ordem | Método & Descrição |
---|---|
1 | fs.rename(oldPath, newPath, callback) rename() assíncrono. A função de callback não tem parâmetros, mas pode lançar exceções. |
2 | fs.ftruncate(fd, len, callback) ftruncate() assíncrono. A função de callback não tem parâmetros, mas pode lançar exceções. |
3 | fs.ftruncateSync(fd, len) ftruncate() síncrono |
4 | fs.truncate(path, len, callback) A função de callback de truncate(). Não há parâmetros, mas pode lançar exceções. |
5 | fs.truncateSync(path, len) Sincronizar truncate(). |
6 | fs.chown(path, uid, gid, callback) Assíncrono chown(). A função de callback não tem parâmetros, mas pode lançar exceções. |
7 | fs.chownSync(path, uid, gid) Sincronizar chown(). |
8 | fs.fchown(fd, uid, gid, callback) Assíncrono fchown(). A função de callback não tem parâmetros, mas pode lançar exceções. |
9 | fs.fchownSync(fd, uid, gid) Sincronizar fchown(). |
10 | fs.lchown(path, uid, gid, callback) Assíncrono lchown(). A função de callback não tem parâmetros, mas pode lançar exceções. |
11 | fs.lchownSync(path, uid, gid) Sincronizar lchown(). |
12 | fs.chmod(path, mode, callback) Assíncrono chmod(). A função de callback não tem parâmetros, mas pode lançar exceções. |
13 | fs.chmodSync(path, mode) Sincronizar chmod(). |
14 | fs.fchmod(fd, mode, callback) Assíncrono fchmod(). A função de callback não tem parâmetros, mas pode lançar exceções. |
15 | fs.fchmodSync(fd, mode) Sincronizar fchmod(). |
16 | fs.lchmod(path, mode, callback) Assíncrono lchmod(). A função de callback não tem parâmetros, mas pode lançar exceções. Apenas disponível no Mac OS X. |
17 | fs.lchmodSync(path, mode) Sincronizar lchmod(). |
18 | fs.stat(path, callback) Assíncrono stat(). A função de callback tem dois parâmetros err, stats, onde stats é um objeto fs.Stats. |
19 | fs.lstat(path, callback) Assíncrono lstat(). A função de callback tem dois parâmetros err, stats, onde stats é um objeto fs.Stats. |
20 | fs.fstat(fd, callback) Assíncrono fstat(). A função de callback tem dois parâmetros err, stats, onde stats é um objeto fs.Stats. |
21 | fs.statSync(path) Sincronizar stat(). Retorna uma instância de fs.Stats. |
22 | fs.lstatSync(path) Sincronizado lstat(). Retorna uma instância do fs.Stats. |
23 | fs.fstatSync(fd) Sincronizado fstat(). Retorna uma instância do fs.Stats. |
24 | fs.link(srcpath, dstpath, callback) Assíncrono link(). A função de callback não possui parâmetros, mas pode lançar exceções. |
25 | fs.linkSync(srcpath, dstpath) Sincronizado link(). |
26 | fs.symlink(srcpath, dstpath[, type], callback) Assíncrono symlink(). A função de callback não possui parâmetros, mas pode lançar exceções. O parâmetro type pode ser configurado para 'dir', 'file', ou 'junction' (padrão 'file'). |
27 | fs.symlinkSync(srcpath, dstpath[, type]) Sincronizado symlink(). |
28 | fs.readlink(path, callback) Assíncrono readlink(). A função de callback possui dois parâmetros err, linkString. |
29 | fs.realpath(path[, cache], callback) Assíncrono realpath(). A função de callback possui dois parâmetros err, resolvedPath. |
30 | fs.realpathSync(path[, cache]) Sincronizado realpath(). Retorna o caminho absoluto. |
31 | fs.unlink(path, callback) Assíncrono unlink(). A função de callback não possui parâmetros, mas pode lançar exceções. |
32 | fs.unlinkSync(path) Sincronizado unlink(). |
33 | fs.rmdir(path, callback) Assíncrono rmdir(). A função de callback não possui parâmetros, mas pode lançar exceções. |
34 | fs.rmdirSync(path) Sincronizado rmdir(). |
35 | fs.mkdir(path[, mode], callback) Assíncrono mkdir(2). A função de callback não possui parâmetros, mas pode lançar exceções. O acesso padrão é 0777. |
36 | fs.mkdirSync(path[, mode]) Sincronizado mkdir(). |
37 | fs.readdir(path, callback) Assíncrono readdir(3). Lê o conteúdo do diretório. |
38 | fs.readdirSync(path) Sincronizado readdir(). Retorna uma lista de arrays de arquivos. |
39 | fs.close(fd, callback) Versão assíncrona do close(). A função de callback não possui parâmetros, mas pode lançar exceções. |
40 | fs.closeSync(fd) Versão síncrona do close(). |
41 | fs.open(path, flags[, mode], callback) Abrir arquivo de forma assíncrona. |
42 | fs.openSync(path, flags[, mode]) Versão síncrona do fs.open(). |
43 | fs.utimes(path, atime, mtime, callback) |
44 | fs.utimesSync(path, atime, mtime) Modificar o timestamp do arquivo, o arquivo é especificado pelo caminho do arquivo. |
45 | fs.futimes(fd, atime, mtime, callback) |
46 | fs.futimesSync(fd, atime, mtime) Modificar o timestamp do arquivo, especificado pelo descritor de arquivo. |
47 | fs.fsync(fd, callback) Versão assíncrona do fsync. A função de callback não possui parâmetros, mas pode lançar exceções. |
48 | fs.fsyncSync(fd) Versão síncrona do fsync. |
49 | fs.write(fd, buffer, offset, length[, position], callback) Escrever o conteúdo do buffer para o arquivo especificado pelo descritor de arquivo. |
50 | fs.write(fd, data[, position[, encoding]], callback) Escrever o conteúdo do arquivo através do descritor de arquivo fd. |
51 | fs.writeSync(fd, buffer, offset, length[, position]) Versão síncrona do fs.write()。 |
52 | fs.writeSync(fd, data[, position[, encoding]]) Versão síncrona do fs.write(). |
53 | fs.read(fd, buffer, offset, length, position, callback) Ler o conteúdo do arquivo através do descritor de arquivo fd. |
54 | fs.readSync(fd, buffer, offset, length, position) Versão síncrona do fs.read. |
55 | fs.readFile(filename[, options], callback) Ler o conteúdo do arquivo de forma assíncrona. |
56 | fs.readFileSync(filename[, options]) Versão síncrona do fs.readFile. |
57 | fs.writeFile(filename, data[, options], callback) Escreve conteúdo no arquivo de forma assíncrona. |
58 | fs.writeFileSync(filename, data[, options]) Versão síncrona do fs.writeFile. |
59 | fs.appendFile(filename, data[, options], callback) Adiciona conteúdo ao arquivo de forma assíncrona. |
60 | fs.appendFileSync(filename, data[, options]) Versão síncrona do fs.appendFile. |
61 | fs.watchFile(filename[, options], listener) Verifica as alterações no arquivo. |
62 | fs.unwatchFile(filename[, listener]) Para de verificar as alterações no filename. |
63 | fs.watch(filename[, options][, listener]) Verifica as alterações no filename, que pode ser um arquivo ou diretório. Retorna um objeto fs.FSWatcher. |
64 | fs.exists(path, callback) Verifica se o caminho fornecido existe. |
65 | fs.existsSync(path) Versão síncrona do fs.exists. |
66 | fs.access(path[, mode], callback) Testa as permissões do usuário no caminho especificado. |
67 | fs.accessSync(path[, mode]) Versão síncrona do fs.access. |
68 | fs.createReadStream(path[, options]) Retorna um objeto ReadStream. |
69 | fs.createWriteStream(path[, options]) Retorna um objeto WriteStream. |
70 | fs.symlink(srcpath, dstpath[, type], callback) A função síncrona symlink(). A função de callback não tem parâmetros, mas pode lançar exceções. |
Para mais informações, consulte a descrição do módulo do Sistema de Arquivos no site oficial:Sistema de Arquivos.