Nodejs開發(fā)實(shí)戰(zhàn) : 第四節(jié) Node模塊-FileSystem

Node.js 提供一組類似 UNIX(POSIX)標(biāo)準(zhǔn)的文件操作API鸦列。 Node.js 文件系統(tǒng)封裝在 fs 模塊是中,它提供了文件的讀取搪花、寫入遏片、更名、刪除撮竿、遍歷目錄吮便、鏈接等POSIX 文件系統(tǒng)操作。

異步(async)和同步(sync)

Nodejs中Api一般都是異步的接口幢踏,如果調(diào)用同步的只需要在后面加上xxxSync()髓需。

Node.js 文件系統(tǒng)(fs 模塊)模塊中的方法均有異步和同步版本,例如讀取文件內(nèi)容的函數(shù)有異步的 fs.readFile() 和同步的 fs.readFileSync()房蝉。

var fs = require("fs");?//異步讀取文件fs.readFile('input.txt', function (err, data) { ? if (err) { ? ? return console.error(err); ? } ? console.log("Asynchronous read: " + data.toString());});?

// /同步讀取文件var data = fs.readFileSync('input.txt');console.log("Synchronous read: " + data.toString());?console.log("Program Ended");? ?

Node文件系統(tǒng):目錄操作

1. 判斷文件路徑是否存在: fs.exists(path, callback)

參數(shù)說(shuō)明:

path 欲檢測(cè)的文件路徑

callback 回調(diào)

?fs.exists("test",function(exists){ ? console.log(exists);})

2. 創(chuàng)建目錄 fs.mkdir/mkdirSync(path[, mode], callback)

path – 文件路徑 ;

mode – 設(shè)置目錄權(quán)限僚匆,默認(rèn)為0777 callback – 回調(diào)函數(shù)

var fs = require("fs");?fs.mkdir("test",function(error){ ? ? ? if (err) return console.error(err); ? ? ? console.log('目錄創(chuàng)建成功');})

3. 查看目錄 fs.readdir(path, callback(err, files))

path – 文件路徑。

callback – 回調(diào)函數(shù)搭幻,回調(diào)函數(shù)帶有兩個(gè)參數(shù)err, files咧擂,err 為錯(cuò)誤信息,files 為 目錄下的文件數(shù)組列表

fs.readdir("test",function(error,files){ ? console.log(files);})

返回結(jié)果: [ ‘note.txt’ ]

fs.readdir("test",function(error,files){ ? console.log(files);})

返回結(jié)果: [ ‘note.txt’ ]

4. 刪除目錄 fs.rmdir(path, callback)

參數(shù)使用說(shuō)明如下:

path – 文件路徑檀蹋。

callback – 回調(diào)函數(shù)松申,回調(diào)函數(shù)帶有兩個(gè)參數(shù)err, files,err 為錯(cuò)誤信息俯逾,files 為 目錄下的文件數(shù)組列表

fs.readdir("test",function(error,files){ ? console.log(files);})

返回結(jié)果: [ ‘note.txt’ ]

注意:只能刪除空的目錄贸桶,有文件的目錄會(huì)報(bào)錯(cuò):

[Error: ENOTEMPTY: directory not empty, rmdir ‘F:\FullStack-Cource-2017\Nodejs-Laravel-Action\03-Node模塊-FileSystem\test’]

Node文件模塊:文件操作說(shuō)明

1. 寫入文件 fs.writeFile(filename, data[, options], callback)

如果文件存在,寫入的內(nèi)容會(huì)覆蓋舊文件內(nèi)容

參數(shù)使用說(shuō)明如下:

path - 文件路徑桌肴』噬福 

data - 要寫入文件的數(shù)據(jù),可以是 String(字符串) 或 Buffer(流) 對(duì)象坠七∷祝 

options - 該參數(shù)是一個(gè)對(duì)象旗笔,包含 {encoding, mode, flag}。默認(rèn)編碼為 utf8, 模式為 0666 离例,flag 為 'w' callback - 回調(diào)函數(shù)换团,回調(diào)函數(shù)只包含錯(cuò)誤信息參數(shù)(err),在寫入失敗時(shí)返回宫蛆。

var fs = require("fs");?fs.writeFile("test/1.txt","hello file",function(error){ ? console.log(error);})

2. 文件讀取 fs.readFile( url , code , callback);

異步讀取文件

fs.readFile(“test/1.txt”,”utf-8″,function(error,data){?console.log(data);?})

異步讀取文件

var data =fs.readFileSync(“test/1.txt”,”utf-8″);?console.log(data);

3. 向文件中追加寫入 fs.appendFile(name,str,encode,callback);

參數(shù)說(shuō)明:

name : 文件名

str : 添加的字段

encode : 設(shè)置編碼

callback : 回調(diào)函數(shù)

栗子

fs.appendFile(“test/1.txt”,’窗前明月光艘包,疑是地上霜’,’utf8′,function(eror){

})

4. 改變文件名 : fs.rename(old文件名,新文件名耀盗,callback(傳遞一個(gè)err參數(shù)))

fs.rename(“test/1.txt”,”test/a.txt”,function(error){

})

5. 查看文件狀態(tài) fs.stat(fileaddr,callback(error,stats))

在fs模塊中想虎,可以使用 fs.stat() 方法或 fs.lstat() 方法查看一個(gè)文件或目錄的信息,如文件的大小叛拷、創(chuàng)建時(shí)間舌厨、權(quán)限等信息。這兩個(gè)方法的唯一區(qū)別是當(dāng)查看符號(hào)鏈接文件的信息時(shí)忿薇,必須使用 fs.lstat() 方法裙椭。

var fs = require(“fs”);

?var path = require(“path”);

var fileaddr = path.resolve(__dirname,"file/note.txt");

/** * fileaddr: 需要查看狀態(tài)的相對(duì),或者絕對(duì)地址 * callback(error,stats): error:返回的錯(cuò)誤信息 * ? ? ? ? ? ? ? ? ? ? ? stats:返回的成功信息 */fs.stat(fileaddr,function(error,stats){ ? if(error){ ? ? ? console.log(error) ? }else{ ? ? ? console.log(stats); ? ? ? console.log(stats.isFile()); ? ? ? console.log(stats.isDirectory()); ? ? ? console.log(stats.isCharacterDevice()); ? ? ? console.log(stats.isSymbolicLink()); ? ? ? console.log(stats.isFIFO()); ? ? ? console.log(stats.isSocket()); ? ? ? console.log(stats.isBlockDevice()); ? }})

fs.Stats對(duì)象的方法如下:

stats.isFile() : 判斷被查看對(duì)象是否是一個(gè)文件署浩。如果是標(biāo)準(zhǔn)文件揉燃,返回true。是目錄筋栋、套接字炊汤、符號(hào)連接、或設(shè)備等返回false弊攘。

stats. isDirectory() : 判斷被查看對(duì)象是否是一個(gè)目錄抢腐。如果是目錄,返回true襟交。

stats. isBlockDevice() : 判斷被查看對(duì)象是否是一個(gè)塊設(shè)備文件迈倍。 如果是塊設(shè)備,返回true捣域,大多數(shù)情況下類UNIX系統(tǒng)的塊設(shè)備都位于/dev目錄下授瘦。

stats. isCharacterDevice() : 判斷被查看對(duì)象是否是一個(gè)字符設(shè)備文件。如果是字符設(shè)備竟宋,返回true。

stats. isSymbolicLink() : 判斷被查看對(duì)象是否是一個(gè)符號(hào)鏈接文件形纺。如果是符號(hào)連接丘侠,返回true。該方法僅在fs.lstat()方法的回調(diào)函數(shù)中有效逐样。

stats.isFIFO() : 判斷被查看對(duì)象是否是一個(gè)FIFO文件蜗字。如果是FIFO打肝,返回true。FIFO是UNIX中的一種特殊類型的命令管道挪捕。該方法僅在LINUX系統(tǒng)下有效粗梭。

stats.isSocket() : 判斷被查看對(duì)象是否是一個(gè)socket文件。 如果是UNIX套接字级零,返回true断医。該方法僅在LINUX系統(tǒng)下有效。

fs.Stats對(duì)象的屬性如下:

dev : 文件或目錄所在的設(shè)備ID奏纪。該屬性值在UNIX系統(tǒng)下有效鉴嗤;

mode : 文件或目錄的權(quán)限標(biāo)志,采用數(shù)值形式表示序调;

nlink : 文件或目錄的的硬連接數(shù)量醉锅;

uid : 文件或目錄的所有者的用戶ID。該屬性值在UNIX系統(tǒng)下有效发绢;

gid : 文件或目錄的所有者的用戶組ID硬耍。該屬性值在UNIX系統(tǒng)下有效;

rdev : 字符設(shè)備文件或塊設(shè)備文件所在設(shè)備ID边酒。該屬性值在UNIX系統(tǒng)下有效经柴;**

ino : 文件或目錄的索引編號(hào)。該屬性值僅在UNIX系統(tǒng)下有效甚纲;

size : 文件的字節(jié)數(shù)口锭;

atime : 文件或目錄的訪問時(shí)間;

mtime : 文件或目錄的最后修改時(shí)間介杆;

ctime : 文件或目錄狀態(tài)的最后修改時(shí)間鹃操;

birthtime : 文件創(chuàng)建時(shí)間,文件創(chuàng)建時(shí)生成春哨。在一些不提供文件

birthtime 的文件系統(tǒng)中荆隘,這個(gè)字段會(huì)使用 ctime 或 1970-01-01T00:00Z 來(lái)填充;

6. 刪除文件 fs.unlink(path, callback)

參數(shù)說(shuō)明


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赴背,一起剝皮案震驚了整個(gè)濱河市椰拒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凰荚,老刑警劉巖燃观,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異便瑟,居然都是意外死亡缆毁,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門到涂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)脊框,“玉大人颁督,你說(shuō)我怎么就攤上這事〗奖ⅲ” “怎么了沉御?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)昭灵。 經(jīng)常有香客問我吠裆,道長(zhǎng),這世上最難降的妖魔是什么虎锚? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任硫痰,我火速辦了婚禮,結(jié)果婚禮上窜护,老公的妹妹穿的比我還像新娘效斑。我一直安慰自己,他們只是感情好柱徙,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布缓屠。 她就那樣靜靜地躺著,像睡著了一般护侮。 火紅的嫁衣襯著肌膚如雪敌完。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天羊初,我揣著相機(jī)與錄音滨溉,去河邊找鬼。 笑死长赞,一個(gè)胖子當(dāng)著我的面吹牛晦攒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播得哆,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼脯颜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了贩据?” 一聲冷哼從身側(cè)響起栋操,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎饱亮,沒想到半個(gè)月后矾芙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡近上,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年蠕啄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡歼跟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出格遭,到底是詐尸還是另有隱情哈街,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布拒迅,位于F島的核電站骚秦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏璧微。R本人自食惡果不足惜作箍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望前硫。 院中可真熱鬧胞得,春花似錦、人聲如沸屹电。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)危号。三九已至牧愁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間外莲,已是汗流浹背猪半。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留偷线,地道東北人磨确。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像淋昭,于是被迫代替她去往敵國(guó)和親俐填。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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

  • Node.js 常用工具 util 是一個(gè)Node.js 核心模塊翔忽,提供常用函數(shù)的集合英融,用于彌補(bǔ)核心JavaScr...
    FTOLsXD閱讀 530評(píng)論 0 2
  • //公共引用 varfs =require('fs'), path =require('path'); 1、讀取文...
    才気莮孒閱讀 827評(píng)論 0 1
  • 文件系統(tǒng)模塊是一個(gè)封裝了標(biāo)準(zhǔn)的 POSIX 文件 I/O 操作的集合歇式。通過(guò)require('fs')使用這個(gè)模塊驶悟。...
    保川閱讀 774評(píng)論 0 0
  • 一痕鳍、核心模塊和對(duì)象 核心模塊的意義 常用內(nèi)置模塊path:處理文件路徑fs:操作文件系統(tǒng)child_process...
    EndEvent閱讀 4,406評(píng)論 0 1
  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測(cè)試 ...
    KeKeMars閱讀 6,312評(píng)論 0 6