fs
模块提供了创建文件可读流与创建文件可写读的方法:fs.createReadStream()
和fs. createWriteStream()
,这两个方法分别分返回一个Readable Stream
对象和Writable Stream
对象。通过这两个对象,我们可以基于流的文件处理,在读写大文件及基于流的转接、暂停、读取等操作方面有很大的作用。
1. fs.createReadStream()
创建可读流
fs.createReadStream(path[, options])
该方法会读取指定文件,并返回一个ReadStream对象。
path
是要创建可读流的文件的路径。
要知道,通过方法返回的可读流,其默认的highWaterMark
值是64K,不同于一般可读流的16K。
options
是创建选项,可是一个字符串或对象。其默认值如下:
{ flags: 'r', encoding: null, fd: null, mode: 0o666, autoClose: true }
options
选项中还可以包含start
和 end
选项,用于设置读取文件的位置范围,而不是读取整个文件。
encoding
可以是:'utf8'
、'ascii'
、'base64'
。
如果提供了文件描述符fd
值,ReadStream
将会忽略path
参数并从文件描述创建可读流。但种创建方法不会触发任何'open'
事件。
Class: fs.ReadStream
简单介绍
该对象由fs.createReadStream()
创建返回,是一个ReadStream。该可读流对象不同于其它可读流不是的一点是,该对象包含一个'open'
事件。
如果options
为字符串,其值表示编码方式。
Event:'open'
,该事件会在创建文件ReadStream
时触发,其回调函数参数是一个文件描述。
-
fd
{Integer} ReadStream 所使用的文件描述符。
例如,以流的方法读取/etc/passwd
文件内容:
var fs = require('fs'); var readStream = fs.createReadStream('/etc/passwd') readStream.on('open', function(fd){ console.log('文件已打开'); }); readStream.on('data', function(data){ console.log('收到文件数据'); console.log(data.toString()); });
2. fs.createWriteStream()
创建可写流
fs.createWriteStream(path[, options])
创建一个WriteStream对象。
options
是创建选项,可是一个字符串或对象。其默认值如下:
{ flags: 'w', defaultEncoding: 'utf8', fd: null, mode: 0o666 }
options
中也可以包含一个start
的可选项,该选项用于指定在文件中开始写入数据的位置。
如果只想修改而不替换文件,只需将flags
值修改为r+
即可。
encoding
可以是:'utf8'
、'ascii'
、'base64'
。
像ReadStream
一样,如果提供了文件描述符fd
值,WriteStream
将会忽略path
参数并从文件描述创建可读流。但种创建方法不会触发任何'open'
事件。
如果options
为字符串,其值表示编码方式。
fs.WriteStream简单介绍
该对象由fs.WriteStream()
创建返回,是一个WriteStream。
Event:'open'
,该事件会在创建文件ReadStream
时触发,其回调函数参数是一个文件描述。
-
fd
{Integer} ReadStream 所使用的文件描述符。
例如,读取/etc/passwd
文件内容,并将其写入./myFile.txt
文件:
var fs = require('fs'); var readStream = fs.createReadStream('/etc/passwd') var writeStream = fs.createWriteStream('./myFile.txt') readStream.on('data', function(data){ writeStream.write(data); });