本篇文章給大家介紹一下Nodejs中的文件操作(創(chuàng)建和刪除目錄/文件、重命名、追加內(nèi)容、讀取內(nèi)容),以及簡(jiǎn)單聊聊stream(流)。
NodeJS文件操作
NodeJS
除了在網(wǎng)絡(luò)方面大放異彩,它還可以對(duì)文件進(jìn)行操作,按邏輯上來說只要我們合理運(yùn)用這些api
再加上一些數(shù)據(jù)處理,我們就可以完成本地很多的操作?!就扑]學(xué)習(xí):《nodejs 教程》】- 在上一篇我們知道如果想引用一個(gè)模塊則需要使用到
require
,而今天要介紹的主角是fs
模塊,也就是NodeJS
內(nèi)置的一個(gè)文件模塊,這個(gè)模塊有很多的API
供我們使用。
創(chuàng)建目錄和文件
- 我們可以使用
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è)文件。
檢測(cè)文件
- 我們可以通過
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)了') } })
追加內(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)容。
stream(流)
- 最后我們來簡(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 – 沒有