作用
這個api的作用是打開一個可讀的文件流並且返回一個fs.ReadStream對象
參數
/*
createReadStream(path,option):該用來打開一個可讀的文件流,它返回一個fs.ReadStream對象
@params:path指定文件的路徑
@params:options可選,是一個JS對象,可以指定一些選項如:
let option={
flags: 'r',//指定用什麼模式打開文件,’w’代表寫,’r’代表讀,類似的還有’r+’、’w+’、’a’等
encoding: 'utf8',//指定打開文件時使用編碼格式,默認就是“utf8”,你還可以爲它指定”ascii”或”base64”
fd: null,//fd屬性默認爲null,當你指定了這個屬性時,createReadableStream會根據傳入的fd創建一個流,忽略path。另外你要是想讀取一個文件的特定區域,可以配置start、end屬性,指定起始和結束(包含在內)的字節偏移
mode: 0666,
autoClose: true//autoClose屬性爲true(默認行爲)時,當發生錯誤或文件讀取結束時會自動關閉文件描述符
}
*/
返回對象
既然它有返回值並且返回一個對象,那我們不妨用個變量來接收這個值,並打印出來看看是個什麼東西:
返回對象包含一大堆屬性,有興趣的朋友可以去深究一下
ReadStream {
_readableState:
ReadableState {
objectMode: false,
highWaterMark: 65536,
buffer: BufferList { head: null, tail: null, length: 0 },
length: 0,
pipes: null,
pipesCount: 0,
flowing: null,
ended: false,
endEmitted: false,
reading: false,
sync: true,
needReadable: false,
emittedReadable: false,
readableListening: false,
resumeScheduled: false,
destroyed: false,
defaultEncoding: 'utf8',
awaitDrain: 0,
readingMore: false,
decoder:
StringDecoder {
encoding: 'utf8',
fillLast: [Function: utf8FillLast],
lastNeed: 0,
lastTotal: 0,
lastChar: <Buffer 00 00 00 00> },
encoding: 'utf8' },
readable: true,
domain: null,
_events: { end: [Function] },
_eventsCount: 1,
_maxListeners: undefined,
path: './test/b.js',
fd: null,
flags: 'r',
mode: 438,
start: undefined,
end: undefined,
autoClose: true,
pos: undefined,
bytesRead: 0 }
常用方法
既然該函數的作用是用來打開一個可讀的文件流那麼我就通過寫個demo來測試一下它的作用,並講講該函數的常用方法
const fs=require('fs');
const path=require('path');
let readStream=fs.createReadStream('./test/b.js',{encoding:'utf8'});
//console.log(readStream);
//讀取文件發生錯誤事件
readStream.on('error', (err) => {
console.log('發生異常:', err);
});
//已打開要讀取的文件事件
readStream.on('open', (fd) => {
console.log('文件已打開:', fd);
});
//文件已經就位,可用於讀取事件
readStream.on('ready', () => {
console.log('文件已準備好..');
});
//文件讀取中事件·····
readStream.on('data', (chunk) => {
console.log('讀取文件數據:', chunk);
});
//文件讀取完成事件
readStream.on('end', () => {
console.log('讀取已完成..');
});
//文件已關閉事件
readStream.on('close', () => {
console.log('文件已關閉!');
});
效果:
接下來我們隨便寫一個找不到的文件路徑用來測試一下error事件:
返回值如下,把error打印出來了: