天天看點

「從零開始」前端node夠用指北(二)---檔案操作

???? 前言

  • 記得我第一次接觸學習​

    ​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('沒出錯')
  }
})      
「從零開始」前端node夠用指北(二)---檔案操作
  • 可以看到我們成功建立了目錄并寫入了一個檔案。

???? 檢測檔案

  • 我們可以通過​

    ​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​

    ​對象,這個對象提供有關檔案的資訊,我們可以對這個對象資訊來進行判斷。
「從零開始」前端node夠用指北(二)---檔案操作

???? 删除檔案和删除目錄

  • 既然我們可以使用​

    ​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​

    ​可以看到我們檔案已經成功删除。
「從零開始」前端node夠用指北(二)---檔案操作

???? 重命名

  • 我們可以使用​

    ​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​

    ​即可。
「從零開始」前端node夠用指北(二)---檔案操作

???? 讀取檔案和讀取目錄

  • 以上都是對檔案進行增删改的操作,我們現在還需要掌握一下讀取内容,我們可以使用​

    ​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);
  }
})      
「從零開始」前端node夠用指北(二)---檔案操作
/* learnNode.js */
let fs = require('fs');
fs.readdir('./', (err, data) => {
  if(err) {
    console.log('出錯');
  } else {
    console.log("讀取目錄成功!");
    console.log(data);
  }
})      
「從零開始」前端node夠用指北(二)---檔案操作
  • 可以看到我們兩個​

    ​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​

    ​能操作檔案,小至檔案查找,大至代碼編譯。換個角度講,幾乎也隻需要一些資料處理邏輯,再加上一些檔案操作,就能夠編寫出大多數前端工具。
  • 本文夠用指北就到這裡結束了,為了照顧新人講的特别基礎,請大佬們見諒哈~~
  • 如果您覺得這篇文章有幫助到您的的話不妨????關注+點贊+收藏+評論+轉發????支援一下喲~~????

繼續閱讀