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