Node.js內(nèi)置的文件系統(tǒng)模塊(fs)

異步讀取文件

按照js的標(biāo)準(zhǔn),異步讀取一個(gè)文本文件的格式如下:

'use strict'

const fs = require('fs')

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

請(qǐng)注意蛉加,test.txt文件必須在當(dāng)前目錄下曹步,且文件編碼必須為utf-8

如果我們讀取的文件不是文本文件径荔,而是二進(jìn)制文件,怎么辦呢颠黎?
下面演示如何讀取一個(gè)圖片文件:

'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')
    }
})

當(dāng)讀取二進(jìn)制文件時(shí)另锋,不傳入文件編碼時(shí),回調(diào)函數(shù)的data參數(shù)將返回一個(gè)buffer對(duì)象狭归。在Node.js中夭坪,buffer 對(duì)象可以和String做轉(zhuǎn)換,例如过椎,把一個(gè)buffer轉(zhuǎn)化成String

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

String轉(zhuǎn)化為Buffer

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

同步讀取文件

fs 模塊也提供相應(yīng)的同步讀取文件函數(shù)室梅。與異步相比,多了一個(gè)Sync后綴,并且不接受回調(diào)函數(shù)亡鼠,函數(shù)直接返回結(jié)果赏殃。
fs 模塊同步讀取文件如下:

'use strict'

const fs = require('fs')

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

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

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

寫文件

例如:

'use strict'

const fs = require(''fs)

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

writeFile 方法的參數(shù)依次是文件名仁热,數(shù)據(jù)和回調(diào)函數(shù)。如果傳入的數(shù)據(jù)類型是String 勾哩,默認(rèn)按UTF-8編碼寫入文件抗蠢,如果傳入的數(shù)據(jù)類型是Buffer,則寫入的是二進(jìn)制文件钳幅∥矧回調(diào)函數(shù)只關(guān)心成功與否,因?yàn)樾枰粋€(gè)err參數(shù)敢艰。

readFile類似诬乞,writeFile也有一個(gè)同步的方法,叫writeFileSync钠导,例如:

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

stat

如果我們要獲取文件的大小震嫉,創(chuàng)建時(shí)間等信息,可以使用fs.stat()牡属,它返回的是一個(gè)Stat對(duì)象票堵,能告訴我們文件或者目錄的詳細(xì)信息。

'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)
            
            // 創(chuàng)建時(shí)間
            console.log('crateTime:' + stat.birthtime)
            
            // 修改時(shí)間
            console.log('modifiedTime:' + stat.mtime)
        }
    }
})

運(yùn)行結(jié)果如下:

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也有一個(gè)同步的方法逮栅,這里就不多做敘述了悴势。


由于Node.js環(huán)境執(zhí)行的JavaScript代碼是服務(wù)器代碼,所以措伐,絕大多數(shù)需要在服務(wù)器執(zhí)行復(fù)雜的邏輯代碼特纤,所以必須使用異步代碼,否則侥加,同步代碼在執(zhí)行時(shí)捧存,服務(wù)器停止響應(yīng),因?yàn)镴avaScript只有一個(gè)執(zhí)行線程担败。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末昔穴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子提前,更是在濱河造成了極大的恐慌吗货,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岖研,死亡現(xiàn)場(chǎng)離奇詭異卿操,居然都是意外死亡警检,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門害淤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)扇雕,“玉大人,你說(shuō)我怎么就攤上這事窥摄∠夥睿” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵崭放,是天一觀的道長(zhǎng)哨苛。 經(jīng)常有香客問(wèn)我,道長(zhǎng)币砂,這世上最難降的妖魔是什么建峭? 我笑而不...
    開(kāi)封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮决摧,結(jié)果婚禮上亿蒸,老公的妹妹穿的比我還像新娘。我一直安慰自己掌桩,他們只是感情好边锁,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著波岛,像睡著了一般茅坛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上则拷,一...
    開(kāi)封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天贡蓖,我揣著相機(jī)與錄音,去河邊找鬼煌茬。 笑死摩梧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宣旱。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼叛薯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼浑吟!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起耗溜,我...
    開(kāi)封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤组力,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后抖拴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體燎字,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腥椒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了候衍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笼蛛。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蛉鹿,靈堂內(nèi)的尸體忽然破棺而出滨砍,到底是詐尸還是另有隱情方妖,我是刑警寧澤企锌,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布祖凫,位于F島的核電站闯冷,受9級(jí)特大地震影響睬涧,放射性物質(zhì)發(fā)生泄漏真朗。R本人自食惡果不足惜咆课,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一唤崭、第九天 我趴在偏房一處隱蔽的房頂上張望棕孙。 院中可真熱鬧舔亭,春花似錦、人聲如沸散罕。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)欧漱。三九已至职抡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間误甚,已是汗流浹背缚甩。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留窑邦,地道東北人擅威。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像冈钦,于是被迫代替她去往敵國(guó)和親郊丛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • 文件系統(tǒng)模塊是一個(gè)封裝了標(biāo)準(zhǔn)的 POSIX 文件 I/O 操作的集合瞧筛。通過(guò)require('fs')使用這個(gè)模塊厉熟。...
    保川閱讀 773評(píng)論 0 0
  • Node.js是目前非常火熱的技術(shù)较幌,但是它的誕生經(jīng)歷卻很奇特揍瑟。 眾所周知,在Netscape設(shè)計(jì)出JavaScri...
    w_zhuan閱讀 3,609評(píng)論 2 41
  • Node.js 常用工具 util 是一個(gè)Node.js 核心模塊乍炉,提供常用函數(shù)的集合绢片,用于彌補(bǔ)核心JavaScr...
    FTOLsXD閱讀 530評(píng)論 0 2
  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測(cè)試 ...
    KeKeMars閱讀 6,305評(píng)論 0 6
  • 無(wú)法想象底循,在這個(gè)快速發(fā)展的大時(shí)代背景下巢株。即使很多人提及著“女性權(quán)益”這一話題,但卻有此叠,更多的女性卻連自己都放棄...
    杜又又閱讀 176評(píng)論 0 2