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);
});