原創(chuàng)聲明:本文為作者原創(chuàng),未經(jīng)允許不得轉(zhuǎn)載,經(jīng)授權(quán)轉(zhuǎn)載需注明作者和出處
在之前,我們講了有關(guān)使用fs模塊來讀寫文件,,如果讀取數(shù)據(jù)的速度快于寫入的數(shù)據(jù)的速度,那么就可能會(huì)造成數(shù)據(jù)的丟失,這時(shí)候我們就需要使用流來讀取。
使用ReadStream來讀取文件
var ReadStream=fs.createReadStream('/index.js');//創(chuàng)建文件讀取流
ReadStream.on('open',function(){
console.log('開始讀取'); //開始讀取
})
ReadStream.on('data'.function(data){
console.log(data); //讀取數(shù)據(jù)
})
ReadStream.on('close',function(){
console.log('結(jié)束'); //關(guān)閉流
})
ReadStream.on('error',function(){
console.log('失敗') //返回錯(cuò)誤
})
創(chuàng)建文件寫入流
var data = '丁小柒的node';
// 創(chuàng)建一個(gè)可以寫入的流,寫入到文件 output.txt 中
var writerStream = fs.createWriteStream('output.txt');
//以 utf8 編碼形式寫入數(shù)據(jù)
writerStream.write(data,'UTF8');
// 標(biāo)記文件末尾
writerStream.end();
// 處理流事件 --> data, end, and error
writerStream.on('finish', function() {
console.log("寫入完成。");
});
writerStream.on('error', function(err){
console.log('寫入出錯(cuò)‘);
});
console.log("程序執(zhí)行完畢");
如果文件需要暫停傳輸,然后再繼續(xù):
ReadStream.on('data'.function(data){
console.log(data); //讀取數(shù)據(jù)
})
ReadStream.pause(); //暫停data事件
ReadStream.resume(); //繼續(xù)data事件
管道流:
如果我們把文件比作裝水的桶,而水就是文件里的內(nèi)容,我們用一根管子(pipe)連接兩個(gè)桶使得水從一個(gè)桶流入另一個(gè)桶,這樣就慢慢的實(shí)現(xiàn)了大文件的復(fù)制過程,畢竟水往下流。
var readerStream = fs.createReadStream('input.txt');// 創(chuàng)建一個(gè)可讀流
var writerStream = fs.createWriteStream('output.txt');// 創(chuàng)建一個(gè)可寫流
readerStream.pipe(writerStream);// 管道讀寫操作,讀取 input.txt 文件內(nèi)容,并將內(nèi)容寫入到 output.txt 文件中
console.log("程序執(zhí)行完畢");