Node.js內置的文件系統模塊(fs)

異步讀取文件

按照js的標準,異步讀取一個文本文件的格式如下:

'use strict'

const fs = require('fs')

fs.readFile('test.txt', 'utf-8', function(err, data){
    if(err){
        cconsole.log(err)
    }else{
        console.log(data)
    }
})

請注意,test.txt文件必須在當前目錄下,且文件編碼必須為utf-8

如果我們讀取的文件不是文本文件,而是二進制文件,怎么辦呢?
下面演示如何讀取一個圖片文件:

'use strict'

const fs = rquire('fs')

fs.readFile('test.png', function(err, data){
    if(err){
        console.log(err)
    }else{
        console.log(data)
        console.log(data.length + 'bayes')
    }
})

當讀取二進制文件時,不傳入文件編碼時,回調函數的data參數將返回一個buffer對象。在Node.js中,buffer 對象可以和String做轉換,例如,把一個buffer轉化成String

var text = data.toString('utf-8')

String轉化為Buffer

var buf = new Buffer('text', 'uft-8')

同步讀取文件

fs 模塊也提供相應的同步讀取文件函數。與異步相比,多了一個Sync后綴,并且不接受回調函數,函數直接返回結果。
fs 模塊同步讀取文件如下:

'use strict'

const fs = require('fs')

var data = fs.readFileSync('test'.txt, 'utf-8')

如果同步讀取文件失敗,則需要使用try...catch 捕獲該錯誤。

try{
    var data = fs.readFileSync('test.txt', 'utf-8')
}catch(err){
    // 出錯了
}

寫文件

例如:

'use strict'

const fs = require(''fs)

fs.writeFile('test.txt', data, function(err){
    if(err){
        console.log(err)
    }else{
        console.log('ok')
    }
})

writeFile 方法的參數依次是文件名,數據和回調函數。如果傳入的數據類型是String ,默認按UTF-8編碼寫入文件,如果傳入的數據類型是Buffer,則寫入的是二進制文件。回調函數只關心成功與否,因為需要一個err參數。

readFile類似,writeFile也有一個同步的方法,叫writeFileSync,例如:

const data = 'Hello,Node.js'
writeFileSync('test.txt', data)

stat

如果我們要獲取文件的大小,創建時間等信息,可以使用fs.stat(),它返回的是一個Stat對象,能告訴我們文件或者目錄的詳細信息。

'use strict'

const fs = require('fs')

fs.stat('test.txt', function(err, stat){
    if(err){
        console.log(err)
    } else {
        // 是否是文件
        console.log('isFile:' + stat.isFile())
        
        // 是否是目錄
        console.log('isDir' + stat.isDirectory())
        
        if(stat.isFile()){
            // 文件大小
            console.log('size:' + stat.size)
            
            // 創建時間
            console.log('crateTime:' + stat.birthtime)
            
            // 修改時間
            console.log('modifiedTime:' + stat.mtime)
        }
    }
})

運行結果如下:

isFile: true
isDirectory: false
size: 181
crateTime: Fri Dec 11 2015 09:43:41 GMT+0800 (CST)
modifiedTime: Fri Dec 11 2015 12:09:00 GMT+0800 (CST)

stat也有一個同步的方法,這里就不多做敘述了。


由于Node.js環境執行的JavaScript代碼是服務器代碼,所以,絕大多數需要在服務器執行復雜的邏輯代碼,所以必須使用異步代碼,否則,同步代碼在執行時,服務器停止響應,因為JavaScript只有一個執行線程。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 文件系統模塊是一個封裝了標準的 POSIX 文件 I/O 操作的集合。通過require('fs')使用這個模塊。...
    保川閱讀 802評論 0 0
  • Node.js是目前非常火熱的技術,但是它的誕生經歷卻很奇特。 眾所周知,在Netscape設計出JavaScri...
    w_zhuan閱讀 3,639評論 2 41
  • Node.js 常用工具 util 是一個Node.js 核心模塊,提供常用函數的集合,用于彌補核心JavaScr...
    FTOLsXD閱讀 544評論 0 2
  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測試 ...
    KeKeMars閱讀 6,376評論 0 6
  • 無法想象,在這個快速發展的大時代背景下。即使很多人提及著“女性權益”這一話題,但卻有,更多的女性卻連自己都放棄...
    杜又又閱讀 201評論 0 2