本篇文章給大家介紹一下Nodejs中的文件操作(創(chuàng)建和刪除目錄/文件、重命名、追加內(nèi)容、讀取內(nèi)容),以及簡單聊聊stream(流)。
NodeJS文件操作
NodeJS
除了在網(wǎng)絡方面大放異彩,它還可以對文件進行操作,按邏輯上來說只要我們合理運用這些api
再加上一些數(shù)據(jù)處理,我們就可以完成本地很多的操作?!就扑]學習:《nodejs 教程》】- 在上一篇我們知道如果想引用一個模塊則需要使用到
require
,而今天要介紹的主角是fs
模塊,也就是NodeJS
內(nèi)置的一個文件模塊,這個模塊有很多的API
供我們使用。
創(chuàng)建目錄和文件
- 我們可以使用
fs.mkdir
fs.writeFile
來分別創(chuàng)建目錄和文件。 mkdir()
可以接收三個參數(shù),第一個是路徑,第二個是個可選項代表權限,這個我們一般不需要,第三個參數(shù)是一個回調(diào)函數(shù),我們可以在這里面做一些處理。
/* learnNode.js */ let fs = require('fs'); fs.mkdir('js',(err)=>{ if(err){ console.log('出錯') }else{ console.log('未出錯') } })
writeFile()
可以接收四個參數(shù),第一個是路徑,第二個是文件內(nèi)容,第三個可選項代表權限,第四個是回調(diào)函數(shù)。
/* learnNode.js */ let fs = require('fs'); fs.writeFile('./js/newJs.js','console.log("寫入這個")',(err)=>{ if(err){ console.log('出錯') }else{ console.log('沒出錯') } })
- 可以看到我們成功創(chuàng)建了目錄并寫入了一個文件。
檢測文件
- 我們可以通過
fs.stat
來檢測一個路徑的文件是為目錄還是文件,進而可以做一些操作。
/* 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()主要接收兩個參數(shù)第一個是要檢測的文件,第二個是一個回調(diào)函數(shù),這個回調(diào)函數(shù)有兩個參數(shù),分別是
err
錯誤和stats
對象,這個對象提供有關文件的信息,我們可以對這個對象信息來進行判斷。
刪除文件和刪除目錄
- 既然我們可以使用
NodeJS
創(chuàng)建文件那當然我們也可以刪除文件,主要使用的是fs.unlink``fs.rmdir
這兩個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('目錄已刪除'); })
- 這兩個
API
都分別接收兩個參數(shù)是路徑和回調(diào)函數(shù),執(zhí)行node learnNode.js
可以看到我們文件已經(jīng)成功刪除。
重命名
- 我們可以使用
fs.rename
來對文件重命名。
/* learnNode.js */ let fs = require('fs'); fs.rename('oldJs.js','newJs.js',(err)=>{ if(err){ console.log('出錯') }else{ console.log('未出錯') } })
rename()
可以接收三個參數(shù)第一個是路徑第二個是更改的名稱,第三個是回調(diào)函數(shù),值得注意的是,如果第一個參數(shù)和第二個參數(shù)對應的文件所在的位置不一樣時,他不會重命名之前那個文件而是直接把文件剪切放到另一個地方。
/* learnNode.js */ let fs = require('fs'); fs.rename('newJs.js','./js/oldJs.js',(err)=>{ if(err){ console.log('出錯') }else{ console.log('剪切到js文件夾內(nèi)了') } })
追加內(nèi)容
- 上面我們說到創(chuàng)建文件的時候可以順便寫入東西,那么我們可不可以直接在文件追加文字呢?我們可以使用
fs.appendFile
。
/* learnNode.js */ let fs = require('fs'); fs.appendFile('newJs.txt','我是追加的內(nèi)容',(err)=>{ if(err){ console.log('出錯') }else{ console.log('追加內(nèi)容') } })
appendFile()
可以接收三個參數(shù),第一個是路徑,第二個是內(nèi)容,第三個是回調(diào)函數(shù),執(zhí)行node learnNode.js
即可。
讀取文件和讀取目錄
- 以上都是對文件進行增刪改的操作,我們現(xiàn)在還需要掌握一下讀取內(nèi)容,我們可以使用
fs.readFile
和fs.readdir
分別讀取文件和讀取目錄。
/* learnNode.js */ let fs = require('fs'); fs.readFile('newJs.txt', (err, data) => { if(err) { console.log('出錯'); } else { console.log("讀取文件成功!"); console.log(data); } })
/* learnNode.js */ let fs = require('fs'); fs.readdir('./', (err, data) => { if(err) { console.log('出錯'); } else { console.log("讀取目錄成功!"); console.log(data); } })
- 可以看到我們兩個
API
都是接收兩個參數(shù),第一個是路徑,第二個是回調(diào)函數(shù),這個回調(diào)函數(shù)也有兩個參數(shù)里面包含了data
信息,我們可以打印這個data
信息來獲取內(nèi)容。
stream(流)
- 最后我們來簡單聊聊
stream
,翻譯過來就是流
的意思,提到流你會想到什么,河流,水流,都是從一個源頭到另一個源頭,就像水龍頭從開關到流到地面,stream
也是這樣一個過程。 - Stream 有四種流類型:
- Readable – 可讀操作。
- Writable – 可寫操作。
- Duplex – 可讀可寫操作.
- Transform – 操作被寫入數(shù)據(jù),然后讀出結(jié)果。
- 在stream的過程中,我們也有事件可以使用,比如檢測到錯誤觸發(fā)的
error
,有數(shù)據(jù)時觸發(fā)的data
。- data – 當有數(shù)據(jù)可讀時觸發(fā)。
- end – 沒有