17、Node.js 文件系统( fs 模块 )

Node.js fs 模块提供了一组类似 UNIX(POSIX)标准的文件操作 API

引入模块

var fs = require("fs")

异步和同步

Node.js 文件系统 ( fs 模块 ) 模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()

异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息 ( error )

建议使用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞

范例

我们先创建一个 demo.txt 内容如下

demo.txt

DDKK.COM 弟弟快看,程序员编程资料站,教程 
DDKK.COM 弟弟快看,程序员编程资料站官网地址为:ddkk.com

然后我们写一个脚本比较同步读取和异步读取的不同之处

main.js

/*
 * filename: main.js
 * author: DDKK.COM 弟弟快看,程序员编程资料站(ddkk.com)
 * Copyright © 2015-2065 ddkk.com. All rights reserved.
*/

var fs = require("fs");

// 异步读取
fs.readFile('demo.txt', function (err, data) {
   if (err) {
       return console.error(err);
   }
   console.log("异步读取: " + data.toString());
});

// 同步读取
var data = fs.readFileSync('demo.txt');
console.log("同步读取: " + data.toString());

console.log("程序执行完毕!");

运行以上 Node.js 脚本,输出结果如下

$ node main.js
同步读取: DDKK.COM 弟弟快看,程序员编程资料站,教程 
DDKK.COM 弟弟快看,程序员编程资料站官网地址为:ddkk.com

程序执行完毕!
异步读取: DDKK.COM 弟弟快看,程序员编程资料站,教程 
DDKK.COM 弟弟快看,程序员编程资料站官网地址为:ddkk.com

接下来我们详细了解下 Node.js fs 模块提供的方法

打开文件

Node.js fs.open() 可以打开或新建一个文件

语法

Node.js fs.open() 异步方式打开文件的语法如下

fs.open(path, flags[, mode], callback)

参数列表

参数 说明
path 文件的路径
flags 文件打开的行为。具体值详见下文
mode 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)
callback 回调函数,带有两个参数如:callback(err, fd)

flags 参数可以是以下值

Flag 描述
r 以读取模式打开文件。如果文件不存在抛出异常
r+ 以读写模式打开文件。如果文件不存在抛出异常
rs 以同步的方式读取文件
rs+ 以同步的方式读取和写入文件
w 以写入模式打开文件,如果文件不存在则创建
wx 类似 ‘w’,但是如果文件路径存在,则文件写入失败
w+ 以读写模式打开文件,如果文件不存在则创建
wx+ 类似 ‘w+’, 但是如果文件路径存在,则文件读写失败
a 以追加模式打开文件,如果文件不存在则创建
ax 类似 ‘a’, 但是如果文件路径存在,则文件追加失败
a+ 以读取追加模式打开文件,如果文件不存在则创建
ax+ 类似 ‘a+’, 但是如果文件路径存在,则文件读取追加失败

范例

先使用以下命令删除刚刚创建的 demo.txt

$ rm demo.txt

然后我们写一个脚本,使用 fs.open 函数创建 demo.txt

main.js

/*
 * filename: main.js
 * author: DDKK.COM 弟弟快看,程序员编程资料站(ddkk.com)
 * Copyright © 2015-2065 ddkk.com. All rights reserved.
*/

var fs = require("fs");

// 异步打开文件
console.log("准备打开文件!");
fs.open('demo.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
  console.log("文件打开成功!");     
});

运行以上 Node.js 脚本,输出结果如下

$ node main.js
准备打开文件!
文件打开成功

使用ls -lh demo.txt 命令,可以看到我们刚刚创建的文件

$ ls -lh demo.txt 
-rw-r--r-- 1 penglei staff 70 10 25 14:43 demo.txt

获取文件信息

Node.js fs.stat() 方法可以获取文件的信息,比如创建时间,大小等

语法

Node.js fs.stat 方法移步模式获取文件信息语法如下

fs.stat(path, callback)

fs.stat(path) 执行后,会将 stats 类的实例返回给其回调函数

参数列表

参数 说明
path 文件路径
callback 回调函数,带有两个参数如:(err, stats), stats 是 fs.Stats 对象

范例

我们继续使用 fs.open 创建的 demo.txt 文件,这次使用 fs.stat 方法来查看 demo.txt 的文件信息

/*
 * filename: main.js
 * author: DDKK.COM 弟弟快看,程序员编程资料站(ddkk.com)
 * Copyright © 2015-2065 ddkk.com. All rights reserved.
*/

var fs = require("fs");

console.log("准备打开文件!");
fs.stat('demo.txt', function (err, stats) {
   if (err) {
       return console.error(err);
   }
   console.log(stats);
   console.log("读取文件信息成功!");

   // 检测文件类型
   console.log("是否为文件(isFile) ? " + stats.isFile());
   console.log("是否为目录(isDirectory) ? " + stats.isDirectory());    
});

运行以上 Node.js 脚本,输出结果如下

$ node main.js   
准备打开文件!
Stats {
  dev: 16777220,
  mode: 33188,
  nlink: 1,
  uid: 501,
  gid: 20,
  rdev: 0,
  blksize: 4194304,
  ino: 8591512230,
  size: 70,
  blocks: 8,
  atimeMs: 1508914411388.6626,
  mtimeMs: 1508913809135.047,
  ctimeMs: 1508913809135.047,
  birthtimeMs: 1508913809134.8372,
  atime: 2017-10-25T06:53:31.389Z,
  mtime: 2017-10-25T06:43:29.135Z,
  ctime: 2017-10-25T06:43:29.135Z,
  birthtime: 2017-10-25T06:43:29.135Z }
读取文件信息成功!
是否为文件(isFile) ? true
是否为目录(isDirectory) ? false

stats 类

stats 类中的提供方法可以判断文件的相关属性,例如判断是否为文件

/*
 * filename: main.js
 * author: DDKK.COM 弟弟快看,程序员编程资料站(ddkk.com)
 * Copyright © 2015-2065 ddkk.com. All rights reserved.
*/

var fs = require('fs');

fs.stat('demo.txt', function (err, stats) {
    console.log(stats.isFile());         //true
})

运行以上 Node.js 范例,输出结果如下

$ node main.js
true

stats 类提供的方法有

方法 描述
stats.isFile() 如果是文件返回 true,否则返回 false
stats.isDirectory() 如果是目录返回 true,否则返回 false
stats.isBlockDevice() 如果是块设备返回 true,否则返回 false
stats.isCharacterDevice() 如果是字符设备返回 true,否则返回 false
stats.isSymbolicLink() 如果是软链接返回 true,否则返回 false
stats.isFIFO() 如果是FIFO,返回true,否则返回 false。FIFO是UNIX中的一种特殊类型的命令管道
stats.isSocket() 如果是 Socket 返回 true,否则返回 false

写入文件

Node.js fs.writeFile() 方法可以向一个文件写入内容

语法

Node.js fs.writeFile 方法异步模式下写入文件的语法如下

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

如果文件已经存在,该方法写入的内容会覆盖旧的文件内容

参数列表

参数 说明
file 文件名或文件描述符
data 要写入文件的数据,可以是 String(字符串) 或 Buffer(流) 对象
options 该参数是一个对象,包含
callback 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回

范例

我们使用 fs.writeFile 向 demo.txt 写入内容,然后再将其读出来

/*
 * filename: main.js
 * author: DDKK.COM 弟弟快看,程序员编程资料站(ddkk.com)
 * Copyright © 2015-2065 ddkk.com. All rights reserved.
*/

var fs = require("fs");

console.log("准备写入文件");
fs.writeFile('demo.txt', "DDKK.COM 弟弟快看,程序员编程资料站,教程 \nDDKK.COM 弟弟快看,程序员编程资料站官网: https://ddkk.com",  function(err) {
   if (err) {
       return console.error(err);
   }
   console.log("数据写入成功!");
   console.log("--------我是分割线-------------")
   console.log("读取写入的数据!");
   fs.readFile('demo.txt', function (err, data) {
      if (err) {
         return console.error(err);
      }
      console.log("异步读取文件数据: " + data.toString());
   });
});

运行以上 Node.js 脚本,输出结果如下

$ node main.js   
准备写入文件
数据写入成功!
--------我是分割线-------------
读取写入的数据!
异步读取文件数据: DDKK.COM 弟弟快看,程序员编程资料站,教程 
DDKK.COM 弟弟快看,程序员编程资料站官网: https://ddkk.com

读取文件

Node.js fs.read() 方法可以从一个打开的文件描述符中读取内容

语法

Node.js fs.read 方法异步模式下读取文件的语法如下

fs.read(fd, buffer, offset, length, position, callback)

参数列表

参数 说明
fd 通过 fs.open() 方法返回的文件描述符
buffer 数据写入的缓冲区
offset 缓冲区写入的写入偏移量
length 要从文件中读取的字节数
position 文件读取的起始位置,如果 position 的值为 null,则会从当前文件指针的位置读取。
callback 回调函数,有三个参数 err, bytesRead, buffer
err 为错误信息, bytesRead 表示读取的字节数,buffer 为缓冲区对象

范例

我们先用 cat 命令看一下 demo.txt 文件中的内容

$ cat demo.txt 
DDKK.COM 弟弟快看,程序员编程资料站,教程 
DDKK.COM 弟弟快看,程序员编程资料站官网: https://ddkk.com

接下来我们使用 fs.open 方法打开文件,然后使用 fs.read 方法读取其内容

/*
 * filename: main.js
 * author: DDKK.COM 弟弟快看,程序员编程资料站(ddkk.com)
 * Copyright © 2015-2065 ddkk.com. All rights reserved.
*/

var fs = require("fs");
var buf = new Buffer(1024);

console.log("准备打开已存在的文件!");
fs.open('demo.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
   console.log("文件打开成功!");
   console.log("准备读取文件:");
   fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
      if (err){
         console.log(err);
      }
      console.log(bytes + "  字节被读取");

      // 仅输出读取的字节
      if(bytes > 0){
         console.log(buf.slice(0, bytes).toString());
      }
   });
});

运行以上 Node.js 脚本,输出结果如下

$ node main.js
准备打开已存在的文件!
文件打开成功!
准备读取文件:
67  字节被读取
DDKK.COM 弟弟快看,程序员编程资料站,教程 
DDKK.COM 弟弟快看,程序员编程资料站官网: https://ddkk.com

关闭文件

Node.js fs.close 方法可以关闭使用 fs.open 打开的文件

语法

Node.js fs.close 方法异步模式下关闭文件的语法如下

fs.close(fd, callback)

该方法使用了文件描述符关闭文件文件

参数列表

参数 说明
fd 通过 fs.open() 方法返回的文件描述符
callback 回调函数,没有参数

范例

我们先用 cat 命令看一下 demo.txt 文件中的内容

$ cat demo.txt 
DDKK.COM 弟弟快看,程序员编程资料站,教程 
DDKK.COM 弟弟快看,程序员编程资料站官网: https://ddkk.com

然后使用 fs.open 打开文件,使用 fs.read 读取内容,最后使用 fs.close 关闭打开的文件

/*
 * filename: main.js
 * author: DDKK.COM 弟弟快看,程序员编程资料站(ddkk.com)
 * Copyright © 2015-2065 ddkk.com. All rights reserved.
*/

var fs = require("fs");
var buf = new Buffer(1024);

console.log("准备打开文件!");
fs.open('demo.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(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("文件关闭成功");
      });
   });
});

运行以上 Node.js 脚本,输出结果如下

$ node main.js 
准备打开文件!
文件打开成功!
准备读取文件!
DDKK.COM 弟弟快看,程序员编程资料站,教程 
DDKK.COM 弟弟快看,程序员编程资料站官网: https://ddkk.com
文件关闭成功

截断文件

Node.js fs.ftruncate() 方法可以截断使用 fs.open 打开的文件

语法

Node.js fs.ftruncate() 方法异步模式下截取文件的语法如下

fs.ftruncate(fd, len, callback)

该方法使用了文件描述符来截断文件

参数列表

参数 说明
fd 通过 fs.open() 方法返回的文件描述符
len 文件内容截取的长度
callback 回调函数,没有参数

实例

我们先用 cat 命令看一下 demo.txt 文件中的内容

$ cat demo.txt 
DDKK.COM 弟弟快看,程序员编程资料站,教程 
DDKK.COM 弟弟快看,程序员编程资料站官网: https://ddkk.com

然后我们使用 fs.ftruncate 文件截断 demo.txt 10个字节后的内容

/*
 * filename: main.js
 * author: DDKK.COM 弟弟快看,程序员编程资料站(ddkk.com)
 * Copyright © 2015-2065 ddkk.com. All rights reserved.
*/

var fs = require("fs");
var buf = new Buffer(1024);

console.log("准备打开文件!");
fs.open('demo.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
   console.log("文件打开成功!");
   console.log("截取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("文件关闭成功!");
         });
      });
   });
});

以上代码执行结果如下:

$ node main.js
准备打开文件!
文件打开成功!
截取10字节后的文件内容。
文件截取成功。
读取相同的文件
简单教�
文件关闭成功!

我们看到截取出现了乱码,是因为截取使用字节来统计,一个中文是三个字节

然后使用 cat 命令查看 demo.txt 内容如下

$ cat demo.txt 
简单教?% 

删除文件

Node.js fs.unlink() 方法可以删除一个文件

语法

Node.js fs.unLink方法异步模式删除文件语法如下

fs.unlink(path, callback)

参数列表

参数 说明
path 文件路径
callback 回调函数,没有参数

范例

假设当前目录下存在 demo.txt 文件,使用 ls -lh demo.txt 命令显示如下

$ ls -lh demo.txt 
-rw-r--r-- 1 penglei staff 10 10 25 15:25 demo.txt

接下来我们使用 fs.unLink删除 demo.txt

/*
 * filename: main.js
 * author: DDKK.COM 弟弟快看,程序员编程资料站(ddkk.com)
 * Copyright © 2015-2065 ddkk.com. All rights reserved.
*/

var fs = require("fs");

console.log("准备删除文件!");
fs.unlink('demo.txt', function(err) {
   if (err) {
       return console.error(err);
   }
   console.log("文件删除成功!");
});

运行以上 Node.js 脚本,输出结果如下

$ node main.js   
准备删除文件!
文件删除成功

使用ls -lh demo.txt 命令发现文件已经被删除了

$ ls -lh demo.txt
gls: cannot access 'demo.txt': No such file or directory

创建目录

Node.js fs.mkdir() 方法可以创建目录

语法

Node.js fs.mkdir 方法异步模式创建目录语法如下

fs.mkdir(path[, mode], callback)

参数列表

参数 说明
path 文件路径
mode 设置目录权限,默认为 0777
callback 回调函数,没有参数

范例

我们使用 fs.mkdir() 方法在当前目录下创建目录 demo_fs_mkdir

/*
 * filename: main.js
 * author: DDKK.COM 弟弟快看,程序员编程资料站(ddkk.com)
 * Copyright © 2015-2065 ddkk.com. All rights reserved.
*/

var fs = require("fs");

console.log("创建目录 ./demo_fs_mkdir");
fs.mkdir("./demo_fs_mkdir",function(err){
   if (err) {
       return console.error(err);
   }
   console.log("目录创建成功。");
});

运行以上 Node.js 脚本,输出结果如下

$ node main.js   
创建目录 ./demo_fs_mkdir
目录创建成功。

使用ls -lh demo_fs_mkdir 命令显示结果如下

$ ls -lh demo_fs_mkdir
total 0

读取目录

Node.js fs.readdir() 方法可以读取目录

语法

Node.js fs.readdir 异步读取目录语法如下

fs.readdir(path, callback)

参数列表

参数 说明
path 文件路径
callback 回调函数,回调函数带有两个参数 err, files
err 为错误信息,files 为 目录下的文件数组列表

范例

我们使用 fs.readdir 方法读取 /tmp 目录

/*
 * filename: main.js
 * author: DDKK.COM 弟弟快看,程序员编程资料站(ddkk.com)
 * Copyright © 2015-2065 ddkk.com. All rights reserved.
*/

var fs = require("fs");

console.log("查看 /tmp 目录");
fs.readdir("/tmp/",function(err, files){
   if (err) {
       return console.error(err);
   }
   files.forEach( function (file){
       console.log( file );
   });
});

运行以上 Node.js 脚本,输出结果如下

$ node main.js        
查看 /tmp 目录
.adobeLockFile
.keystone_install_lock
0162D6A1-5043-4F41-9668-BFB97FC03E65_IN
0162D6A1-5043-4F41-9668-BFB97FC03E65_OUT
F7C71944B49B446081C0603DE90E4855_IN
F7C71944B49B446081C0603DE90E4855_OUT
adobegc.log
com.adobe.AdobeIPCBroker.ctrl-luojianguo
com.apple.launchd.4RKRpFihtd
com.apple.launchd.jWXPKDhtci
lilo.70012
mongodb-27017.sock
mysql.sock
powerlog
zxpsignMfJEiIgnH9vRzzC0
zxpsignXH6f4knomrLBbcno
zxpsignmKRyJ0GQ5ihCZGgU
zxpsignnidXdFMd3VQOHKH7

删除目录

Node.js fs.rmdir 方法可以删除一个空目录

语法

Node.js fs.rmdir 方法异步模式删除目录的语法格式

fs.rmdir(path, callback)

参数列表

参数 说明
path 文件路径
callback 回调函数,没有参数

范例

我们使用 fs.rmdir 方法删除前面使用 fs.mkdir 方法创建的目录

/*
 * filename: main.js
 * author: DDKK.COM 弟弟快看,程序员编程资料站(ddkk.com)
 * Copyright © 2015-2065 ddkk.com. All rights reserved.
*/

var fs = require("fs");

console.log("准备删除目录 ./demo_fs_mkdir");
fs.rmdir("./demo_fs_mkdir",function(err){
   if (err) {
       return console.error(err);
   }
   console.log("读取 ./demo_fs_mkdir 目录");
   fs.readdir("./demo_fs_mkdir",function(err, files){
      if (err) {
          return console.error(err);
      }
      files.forEach( function (file){
          console.log( file );
      });
   });
});

运行以上 Node.js 脚本,输出结果如下

$ node main.js       
准备删除目录 ./demo_fs_mkdir
读取 ./demo_fs_mkdir 目录
{ Error: ENOENT: no such file or directory, scandir './demo_fs_mkdir'
  errno: -2,
  code: 'ENOENT',
  syscall: 'scandir',
  path: './demo_fs_mkdir' }

fs 模块方法参考手册

下表列出了 fs 模块提供的方法

序号 方法 & 描述
1 fs.rename(oldPath, newPath, callback)
异步 rename().回调函数没有参数,但可能抛出异常
2 fs.ftruncate(fd, len, callback)
异步 ftruncate().回调函数没有参数,但可能抛出异常
3 fs.ftruncateSync(fd, len)
同步 ftruncate()
4 fs.truncate(path, len, callback)
异步 truncate().回调函数没有参数,但可能抛出异常
5 fs.truncateSync(path, len)
同步 truncate()
6 fs.chown(path, uid, gid, callback)
异步 chown().回调函数没有参数,但可能抛出异常
7 fs.chownSync(path, uid, gid)
同步 chown()
8 fs.fchown(fd, uid, gid, callback)
异步 fchown().回调函数没有参数,但可能抛出异常
9 fs.fchownSync(fd, uid, gid)
同步 fchown()
10 fs.lchown(path, uid, gid, callback)
异步 lchown().回调函数没有参数,但可能抛出异常
11 fs.lchownSync(path, uid, gid)
同步 lchown()
12 fs.chmod(path, mode, callback)
异步 chmod().回调函数没有参数,但可能抛出异常
13 fs.chmodSync(path, mode)
同步 chmod()
14 fs.fchmod(fd, mode, callback)
异步 fchmod().回调函数没有参数,但可能抛出异常
15 fs.fchmodSync(fd, mode)
同步 fchmod()
16 fs.lchmod(path, mode, callback)
异步 lchmod().回调函数没有参数,但可能抛出异常。Only available on Mac OS X
17 fs.lchmodSync(path, mode)
同步 lchmod()
18 fs.stat(path, callback)
异步 stat(). 回调函数有两个参数 err, stats,stats 是 fs.Stats 对象
19 fs.lstat(path, callback)
异步 lstat(). 回调函数有两个参数 err, stats,stats 是 fs.Stats 对象
20 fs.fstat(fd, callback)
异步 fstat(). 回调函数有两个参数 err, stats,stats 是 fs.Stats 对象
21 fs.statSync(path)
同步 stat(). 返回 fs.Stats 的实例
22 fs.lstatSync(path)
同步 lstat(). 返回 fs.Stats 的实例
23 fs.fstatSync(fd)
同步 fstat(). 返回 fs.Stats 的实例
24 fs.link(srcpath, dstpath, callback)
异步 link().回调函数没有参数,但可能抛出异常
25 fs.linkSync(srcpath, dstpath)
同步 link()
26 fs.symlink(srcpath, dstpath[, type], callback)
异步 symlink().回调函数没有参数,但可能抛出异常。 type 参数可以设置为 ‘dir’, ‘file’, 或 ‘junction’ (默认为 ‘file’)
27 fs.symlinkSync(srcpath, dstpath[, type])
同步 symlink()
28 fs.readlink(path, callback)
异步 readlink(). 回调函数有两个参数 err, linkString
29 fs.realpath(path[, cache], callback)
异步 realpath(). 回调函数有两个参数 err, resolvedPath
30 fs.realpathSync(path[, cache])
同步 realpath()。返回绝对路径
31 fs.unlink(path, callback)
异步 unlink().回调函数没有参数,但可能抛出异常
32 fs.unlinkSync(path)
同步 unlink()
33 fs.rmdir(path, callback)
异步 rmdir().回调函数没有参数,但可能抛出异常
34 fs.rmdirSync(path)
同步 rmdir()
35 fs.mkdir(path[, mode], callback)
异步 mkdir(2).回调函数没有参数,但可能抛出异常。 mode defaults to 0777
36 fs.mkdirSync(path[, mode])
同步 mkdir()
37 fs.readdir(path, callback)
异步 readdir(3). 读取目录的内容
38 fs.readdirSync(path)
同步 readdir().返回文件数组列表
39 fs.close(fd, callback)
异步 close().回调函数没有参数,但可能抛出异常
40 fs.closeSync(fd)
同步 close()
41 fs.open(path, flags[, mode], callback)
异步打开文件
42 fs.openSync(path, flags[, mode])
同步 version of fs.open()
43 fs.utimes(path, atime, mtime, callback)
44 fs.utimesSync(path, atime, mtime)
修改文件时间戳,文件通过指定的文件路径
45 fs.futimes(fd, atime, mtime, callback)
修改文件时间戳
46 fs.futimesSync(fd, atime, mtime)
修改文件时间戳,通过文件描述符指定
47 fs.fsync(fd, callback)
异步 fsync.回调函数没有参数,但可能抛出异常
48 fs.fsyncSync(fd)
同步 fsync
49 fs.write(fd, buffer, offset, length[, position], callback)
将缓冲区内容写入到通过文件描述符指定的文件
50 fs.write(fd, data[, position[, encoding]], callback)
通过文件描述符 fd 写入文件内容
51 fs.writeSync(fd, buffer, offset, length[, position])
同步版的 fs.write()
52 fs.writeSync(fd, data[, position[, encoding]])
同步版的 fs.write()
53 fs.read(fd, buffer, offset, length, position, callback)
通过文件描述符 fd 读取文件内容
54 fs.readSync(fd, buffer, offset, length, position)
同步版的 fs.read
55 fs.readFile(filename[, options], callback)
异步读取文件内容
56 fs.readFileSync(filename[, options])
同步 readFile(3)
57 fs.writeFile(filename, data[, options], callback)
异步写入文件内容
58 fs.writeFileSync(filename, data[, options])
同步版的 fs.writeFile
59 fs.appendFile(filename, data[, options], callback)
异步追加文件内容
60 fs.appendFileSync(filename, data[, options])
同步 fs.appendFile
61 fs.watchFile(filename[, options], listener)
查看文件的修改
62 fs.unwatchFile(filename[, listener])
停止查看 filename 的修改
63 fs.watch(filename[, options][, listener])
查看 filename 的修改,filename 可以是文件或目录。返回 fs.FSWatcher 对象
64 fs.exists(path, callback)
检测给定的路径是否存在
65 fs.existsSync(path)
同步版的 fs.exists
66 fs.access(path[, mode], callback)
测试指定路径用户权限
67 fs.accessSync(path[, mode])
同步版的 fs.access
68 fs.createReadStream(path[, options])
返回 ReadStream 对象
69 fs.createWriteStream(path[, options])
返回 WriteStream 对象
70 fs.symlink(srcpath, dstpath[, type], callback)
异步 symlink().回调函数没有参数,但可能抛出异常

更多内容,请查看官网文件模块描述: File System