小編給大家分享一下Nodejs文件操作和stream的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)建站專注于秀英網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供秀英營(yíng)銷型網(wǎng)站建設(shè),秀英網(wǎng)站制作、秀英網(wǎng)頁(yè)設(shè)計(jì)、秀英網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務(wù),打造秀英網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供秀英網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
NodeJS
除了在網(wǎng)絡(luò)方面大放異彩,它還可以對(duì)文件進(jìn)行操作,按邏輯上來說只要我們合理運(yùn)用這些api
再加上一些數(shù)據(jù)處理,我們就可以完成本地很多的操作。
在上一篇我們知道如果想引用一個(gè)模塊則需要使用到require
,而今天要介紹的主角是fs
模塊,也就是NodeJS
內(nèi)置的一個(gè)文件模塊,這個(gè)模塊有很多的API
供我們使用。
我們可以使用fs.mkdir
fs.writeFile
來分別創(chuàng)建目錄和文件。
mkdir()
可以接收三個(gè)參數(shù),第一個(gè)是路徑,第二個(gè)是個(gè)可選項(xiàng)代表權(quán)限,這個(gè)我們一般不需要,第三個(gè)參數(shù)是一個(gè)回調(diào)函數(shù),我們可以在這里面做一些處理。
/* learnNode.js */ let fs = require('fs'); fs.mkdir('js',(err)=>{ if(err){ console.log('出錯(cuò)') }else{ console.log('未出錯(cuò)') } })
writeFile()
可以接收四個(gè)參數(shù),第一個(gè)是路徑,第二個(gè)是文件內(nèi)容,第三個(gè)可選項(xiàng)代表權(quán)限,第四個(gè)是回調(diào)函數(shù)。
/* learnNode.js */ let fs = require('fs'); fs.writeFile('./js/newJs.js','console.log("寫入這個(gè)")',(err)=>{ if(err){ console.log('出錯(cuò)') }else{ console.log('沒出錯(cuò)') } })
可以看到我們成功創(chuàng)建了目錄并寫入了一個(gè)文件。
我們可以通過fs.stat
來檢測(cè)一個(gè)路徑的文件是為目錄還是文件,進(jìn)而可以做一些操作。
/* learnNode.js */ let fs = require('fs'); fs.stat('./js/newJs.js', (error, stats) => { if(error) { console.log(error); return false; } else { console.log(`是否文件:${stats.isFile()}`); console.log(`是否目錄:${stats.isDirectory()}`); return false; } })
star()主要接收兩個(gè)參數(shù)第一個(gè)是要檢測(cè)的文件,第二個(gè)是一個(gè)回調(diào)函數(shù),這個(gè)回調(diào)函數(shù)有兩個(gè)參數(shù),分別是err
錯(cuò)誤和stats
對(duì)象,這個(gè)對(duì)象提供有關(guān)文件的信息,我們可以對(duì)這個(gè)對(duì)象信息來進(jìn)行判斷。
既然我們可以使用NodeJS
創(chuàng)建文件那當(dāng)然我們也可以刪除文件,主要使用的是fs.unlink``fs.rmdir
這兩個(gè)API
。
/* learnNode.js */ let fs = require('fs'); fs.unlink('./js/newJs.js', (err) => { if (err) throw err; console.log('文件已刪除'); }); fs.rmdir('./js',(err)=>{ if (err) throw err; console.log('目錄已刪除'); })
這兩個(gè)API
都分別接收兩個(gè)參數(shù)是路徑和回調(diào)函數(shù),執(zhí)行node learnNode.js
可以看到我們文件已經(jīng)成功刪除。
我們可以使用fs.rename
來對(duì)文件重命名。
/* learnNode.js */ let fs = require('fs'); fs.rename('oldJs.js','newJs.js',(err)=>{ if(err){ console.log('出錯(cuò)') }else{ console.log('未出錯(cuò)') } })
rename()
可以接收三個(gè)參數(shù)第一個(gè)是路徑第二個(gè)是更改的名稱,第三個(gè)是回調(diào)函數(shù),值得注意的是,如果第一個(gè)參數(shù)和第二個(gè)參數(shù)對(duì)應(yīng)的文件所在的位置不一樣時(shí),他不會(huì)重命名之前那個(gè)文件而是直接把文件剪切放到另一個(gè)地方。
/* learnNode.js */ let fs = require('fs'); fs.rename('newJs.js','./js/oldJs.js',(err)=>{ if(err){ console.log('出錯(cuò)') }else{ console.log('剪切到j(luò)s文件夾內(nèi)了') } })
上面我們說到創(chuàng)建文件的時(shí)候可以順便寫入東西,那么我們可不可以直接在文件追加文字呢?我們可以使用fs.appendFile
。
/* learnNode.js */ let fs = require('fs'); fs.appendFile('newJs.txt','我是追加的內(nèi)容',(err)=>{ if(err){ console.log('出錯(cuò)') }else{ console.log('追加內(nèi)容') } })
appendFile()
可以接收三個(gè)參數(shù),第一個(gè)是路徑,第二個(gè)是內(nèi)容,第三個(gè)是回調(diào)函數(shù),執(zhí)行node learnNode.js
即可。
以上都是對(duì)文件進(jìn)行增刪改的操作,我們現(xiàn)在還需要掌握一下讀取內(nèi)容,我們可以使用fs.readFile
和fs.readdir
分別讀取文件和讀取目錄。
/* learnNode.js */ let fs = require('fs'); fs.readFile('newJs.txt', (err, data) => { if(err) { console.log('出錯(cuò)'); } else { console.log("讀取文件成功!"); console.log(data); } })
/* learnNode.js */ let fs = require('fs'); fs.readdir('./', (err, data) => { if(err) { console.log('出錯(cuò)'); } else { console.log("讀取目錄成功!"); console.log(data); } })
可以看到我們兩個(gè)API
都是接收兩個(gè)參數(shù),第一個(gè)是路徑,第二個(gè)是回調(diào)函數(shù),這個(gè)回調(diào)函數(shù)也有兩個(gè)參數(shù)里面包含了data
信息,我們可以打印這個(gè)data
信息來獲取內(nèi)容。
最后我們來簡(jiǎn)單聊聊stream
,翻譯過來就是流
的意思,提到流你會(huì)想到什么,河流,水流,都是從一個(gè)源頭到另一個(gè)源頭,就像水龍頭從開關(guān)到流到地面,stream
也是這樣一個(gè)過程。
Stream 有四種流類型:
Readable- 可讀操作。
Writable- 可寫操作。
Duplex- 可讀可寫操作.
Transform- 操作被寫入數(shù)據(jù),然后讀出結(jié)果。
在stream的過程中,我們也有事件可以使用,比如檢測(cè)到錯(cuò)誤觸發(fā)的error
,有數(shù)據(jù)時(shí)觸發(fā)的data
。
data- 當(dāng)有數(shù)據(jù)可讀時(shí)觸發(fā)。
end- 沒有更多的數(shù)據(jù)可讀時(shí)觸發(fā)。
error- 在接收和寫入過程中發(fā)生錯(cuò)誤時(shí)觸發(fā)。
finish- 所有數(shù)據(jù)已被寫入到底層系統(tǒng)時(shí)觸發(fā)。
接下來簡(jiǎn)單舉個(gè)例子理解一下吧。
var fs = require("fs"); var data = ''; // 創(chuàng)建可讀流 var readerStream = fs.createReadStream('newJs.txt'); // 設(shè)置編碼為 utf8。 readerStream.setEncoding('UTF8'); // 處理流事件 遇到有數(shù)據(jù)時(shí)執(zhí)行這個(gè) readerStream.on('data', function(chunk) { data += chunk; console.log(chunk,'流遇到數(shù)據(jù)了') }); // 處理流事件 流結(jié)束時(shí)執(zhí)行這個(gè) readerStream.on('end',function(){ console.log(data,'流結(jié)束了'); }); // 處理流事件 流報(bào)錯(cuò)時(shí)執(zhí)行這個(gè) readerStream.on('error', function(err){ console.log(err.stack); }); console.log("程序執(zhí)行完畢");
我們一開始可以創(chuàng)建一個(gè)可讀流fs.createReadStream()
,參數(shù)是你要讀的文件路徑。
當(dāng)遇到了數(shù)據(jù)時(shí)會(huì)執(zhí)行readerStream.on('data',callback())
,如下圖所示。
當(dāng)流結(jié)束時(shí)會(huì)執(zhí)行readerStream.on('end',callback())
,如下圖所示。
我們上面演示了如何通過流讀取一個(gè)文件,接下來我們?cè)囋囃ㄟ^流寫入文件。
var fs = require("fs"); var data = '我是小盧,我再寫入流'; // 創(chuàng)建一個(gè)可以寫入的流,寫入到文件 newJs.txt 中 var writerStream = fs.createWriteStream('newJs.txt'); // 使用 utf8 編碼寫入數(shù)據(jù) writerStream.write(data,'UTF8'); // 標(biāo)記文件末尾 writerStream.end(); // 處理流事件 完成和報(bào)錯(cuò)時(shí)執(zhí)行 writerStream.on('finish', function() { console.log("寫入完畢"); }); writerStream.on('error', function(err){ console.log(err.stack); }); console.log("程序執(zhí)行完畢");
我們首先創(chuàng)建一個(gè)流,然后將data
數(shù)據(jù)寫入newJs.txt
文件中。
當(dāng)流寫入完畢時(shí)會(huì)執(zhí)行readerStream.on('finish',callback())
,如下圖所示。
可以看到該newJs.txt
文件中已經(jīng)存在了我們寫入的數(shù)據(jù)。
以上是“Nodejs文件操作和stream的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
本文題目:Nodejs文件操作和stream的示例分析
分享路徑:http://www.rwnh.cn/article34/jiscpe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、網(wǎng)頁(yè)設(shè)計(jì)公司、域名注冊(cè)、靜態(tài)網(wǎng)站、小程序開發(fā)、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)