Node.js 筆記: FileSystem

其實Node.js只有剛碰到些皮毛,整個就是超級不熟,但今天因為工作上需要,所以只能查查資料硬上了,一整個就是大挫敗(死),目前需要做的是跟檔案處理有關,而說到檔案就不能不提到Node.js的FileSystem,簡稱fs

這篇文章應該不會做到詳細的介紹,後端Node.js還是超級初新者,所以本篇主要是筆記我實作上所遇到的問題與查詢到的資料,希望能幫助到同樣有問題的朋友。

FileSystem前置作業

FileSystem官方文件:https://nodejs.org/api/fs.html

FileSystem主要是在做對檔案的管理、監控、讀取等等,總之想到跟檔案有關的東西都可以來這邊找找,當然,使用前FileSystem之前,我們要記得先require進我們的js檔。

補充說明:有sync在名稱的函式,代表著「同步」,沒有sync代表「非同步」,請看此篇文章

var fs = require('fs');

一次讀取檔案:readFile(filePath, [option], callback)

這個函式負責的就是在非同步的狀態下讀取檔案,當檔案全部讀取到buffer後,執行「Callback」函式。

  • 「filePath」負責接收「檔案路徑」
  • 「option」則是有一些選項可以額外傳入
  • 「callback」則代表檔案讀取完畢時要執行的函式內容

「callback」會被傳入兩個參數:「error」和「data」,正常狀態下「error」是空值,如果有錯誤就會有東西,「data」則是儲存了從路徑讀取到的檔案內容,我們就可以用讀取到的「data」做我們想要做的事情。

fs.readFile(filePath, 'utf8', function(error, data) {
    if( error )
        console.log( error );
    else
        res.write(data);
        res.end();
});

分批讀取檔案:createReadStream(path, [option])

為什麼有了readFile還要createReadStream呢?因為有的時候我們要讀取的檔案比較大,而上面有提到,readFile會把檔案讀取完畢再執行callback,很有可能會讓使用者等待過久,因此才會有createReadStream的誕生,它的用法如下:

//先建立一個Read Stream
var readStream = fs.createReadStream;
//定義一個變數儲存完整檔案
var wholeData;
//給readStream Listen一個data事件,callback會被傳入一個參數,其值為讀取的檔案的一小片段
readStream.on('data', function(chunk){
    console.log('讀取中');
    wholeData += chunk;
});
//當readStream Listen到一個end事件時,表示檔案讀取完畢了,執行callback,
readStream.on('end', function(){
    console.log(wholeData);
});

1 Comment

  1. 這樣聽起來你知道有沒有 sync 的差別囉

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料