???? 前言
- 記得我第一次接觸學習
的時候還是跟着菜鳥教程一個個學起來,時間過得也挺久了,平時如果沒有怎麼使用的話也會慢慢淡忘些許????。node
- 當時學的時候就感覺有點迷茫,不知道學來幹嘛????,有些公司很少需要你會
甚至不用,我相信有挺多入門選手也是這樣的想法的????,帶着這個想法我想重新學習一下node
,并站在學習者的角度感同身受的分享一下這個node
系列,希望對大家有所幫助????。夠用指北
- 相信大家想學習
也是為了能夠自己寫點資料展示一下,實作一下增删查改,本系列為了照顧新手同學會講的比較基礎,目的就是為了滿足前端node
的夠用目标。node
- 本文主要分享的是
的檔案操作,全文大概node
字,閱讀可能需要十分鐘。具體的指北向導放在文章最下方,會持續更新喔,歡迎點贊收藏❤️❤️~2400+
???? NodeJS檔案操作
-
除了在網絡方面大放異彩,它還可以對檔案進行操作,按邏輯上來說隻要我們合理運用這些NodeJS
再加上一些資料處理,我們就可以完成本地很多的操作。api
- 在上一篇我們知道如果想引用一個子產品則需要使用到
,而今天要介紹的主角是require
子產品,也就是fs
内置的一個檔案子產品,這個子產品有很多的NodeJS
供我們使用。API
???? 建立目錄和檔案
- 我們可以使用
fs.mkdir
來分别建立目錄和檔案。fs.writeFile
-
可以接收三個參數,第一個是路徑,第二個是個可選項代表權限,這個我們一般不需要,第三個參數是一個回調函數,我們可以在這裡面做一些處理。mkdir()
/* learnNode.js */
let fs = require('fs');
fs.mkdir('js',(err)=>{
if(err){
console.log('出錯')
}else{
console.log('未出錯')
}
})
-
可以接收四個參數,第一個是路徑,第二個是檔案内容,第三個可選項代表權限,第四個是回調函數。writeFile()
/* learnNode.js */
let fs = require('fs');
fs.writeFile('./js/newJs.js','console.log("寫入這個")',(err)=>{
if(err){
console.log('出錯')
}else{
console.log('沒出錯')
}
})

- 可以看到我們成功建立了目錄并寫入了一個檔案。
???? 檢測檔案
- 我們可以通過
來檢測一個路徑的檔案是為目錄還是檔案,進而可以做一些操作。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()主要接收兩個參數第一個是要檢測的檔案,第二個是一個回調函數,這個回調函數有兩個參數,分别是
錯誤和err
對象,這個對象提供有關檔案的資訊,我們可以對這個對象資訊來進行判斷。stats
???? 删除檔案和删除目錄
- 既然我們可以使用
建立檔案那當然我們也可以删除檔案,主要使用的是NodeJS
這兩個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
可以看到我們檔案已經成功删除。node learnNode.js
???? 重命名
- 我們可以使用
來對檔案重命名。fs.rename
/* learnNode.js */
let fs = require('fs');
fs.rename('oldJs.js','newJs.js',(err)=>{
if(err){
console.log('出錯')
}else{
console.log('未出錯')
}
})
-
可以接收三個參數第一個是路徑第二個是更改的名稱,第三個是回調函數,值得注意的是,如果第一個參數和第二個參數對應的檔案所在的位置不一樣時,他不會重命名之前那個檔案而是直接把檔案剪切放到另一個地方。rename()
/* learnNode.js */
let fs = require('fs');
fs.rename('newJs.js','./js/oldJs.js',(err)=>{
if(err){
console.log('出錯')
}else{
console.log('剪切到js檔案夾内了')
}
})
???? 追加内容
- 上面我們說到建立檔案的時候可以順便寫入東西,那麼我們可不可以直接在檔案追加文字呢?我們可以使用
。fs.appendFile
/* learnNode.js */
let fs = require('fs');
fs.appendFile('newJs.txt','我是追加的内容',(err)=>{
if(err){
console.log('出錯')
}else{
console.log('追加内容')
}
})
-
可以接收三個參數,第一個是路徑,第二個是内容,第三個是回調函數,執行appendFile()
即可。node learnNode.js
???? 讀取檔案和讀取目錄
- 以上都是對檔案進行增删改的操作,我們現在還需要掌握一下讀取内容,我們可以使用
和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
資訊,我們可以列印這個data
資訊來擷取内容。data
???? stream(流)
- 最後我們來簡單聊聊
,翻譯過來就是stream
的意思,提到流你會想到什麼,河流,水流,都是從一個源頭到另一個源頭,就像水龍頭從開關到流到地面,流
也是這樣一個過程。stream
- Stream 有四種流類型:
- Readable- 可讀操作。
- Writable- 可寫操作。
- Duplex- 可讀可寫操作.
- Transform- 操作被寫入資料,然後讀出結果。
- 在stream的過程中,我們也有事件可以使用,比如檢測到錯誤觸發的
,有資料時觸發的error
。data
- data- 當有資料可讀時觸發。
- end- 沒有更多的資料可讀時觸發。
- error- 在接收和寫入過程中發生錯誤時觸發。
- finish- 所有資料已被寫入到底層系統時觸發。
- 接下來簡單舉個例子了解一下吧。
???? 讀取流
var fs = require("fs");
var data = '';
// 建立可讀流
var readerStream = fs.createReadStream('newJs.txt');
// 設定編碼為 utf8。
readerStream.setEncoding('UTF8');
// 處理流事件 遇到有資料時執行這個
readerStream.on('data', function(chunk) {
data += chunk;
console.log(chunk,'流遇到資料了')
});
// 處理流事件 流結束時執行這個
readerStream.on('end',function(){
console.log(data,'流結束了');
});
// 處理流事件 流報錯時執行這個
readerStream.on('error', function(err){
console.log(err.stack);
});
console.log("程式執行完畢");
- 我們一開始可以建立一個可讀流
,參數是你要讀的檔案路徑。fs.createReadStream()
- 當遇到了資料時會執行
,如下圖所示。readerStream.on('data',callback())
- 當流結束時會執行
,如下圖所示。readerStream.on('end',callback())
???? 寫入流
- 我們上面示範了如何通過流讀取一個檔案,接下來我們試試通過流寫入檔案。
var fs = require("fs");
var data = '我是小盧,我再寫入流';
// 建立一個可以寫入的流,寫入到檔案 newJs.txt 中
var writerStream = fs.createWriteStream('newJs.txt');
// 使用 utf8 編碼寫入資料
writerStream.write(data,'UTF8');
// 标記檔案末尾
writerStream.end();
// 處理流事件 完成和報錯時執行
writerStream.on('finish', function() {
console.log("寫入完畢");
});
writerStream.on('error', function(err){
console.log(err.stack);
});
console.log("程式執行完畢");
- 我們首先建立一個流,然後将
資料寫入data
檔案中。newJs.txt
- 當流寫入完畢時會執行
,如下圖所示。readerStream.on('finish',callback())
- 可以看到該
檔案中已經存在了我們寫入的資料。newJs.txt
???? 寫在最後
- 總的來說
提供了NodeJS
檔案操作子產品,這個子產品有很多的fs
,上面隻是簡單的展示了一下,還有很多有趣的API
大家隻需要用到的時候去官網查就好了,因為API
能操作檔案,小至檔案查找,大至代碼編譯。換個角度講,幾乎也隻需要一些資料處理邏輯,再加上一些檔案操作,就能夠編寫出大多數前端工具。NodeJS
- 本文夠用指北就到這裡結束了,為了照顧新人講的特别基礎,請大佬們見諒哈~~
- 如果您覺得這篇文章有幫助到您的的話不妨????關注+點贊+收藏+評論+轉發????支援一下喲~~????