node.js之文件操作

與其他模塊相同吗伤,首先引入fs文件操作模塊吃靠,使用require引入。
node.js的文件操作與php類似足淆,都是一些讀巢块,寫,復(fù)制巧号,刪除等一些基本操作族奢,但他比php要簡單點,就三個參數(shù)a:追加丹鸿;w:寫入越走;r:讀取,php除了有這第三種之外還有a+,w+等操作靠欢,較為復(fù)雜點廊敌。
文件操作分為兩大塊:文件的操作與文件夾的操作

一、文件的操作

1. 創(chuàng)建文件

flag對應(yīng)的有三個參數(shù):a追加 w寫入 r讀取
注意區(qū)分a與w的區(qū)別:

  • a:是追加门怪,在文件中添加新的東西不覆蓋文件原有的東西;
  • w:寫入骡澈,添加新的內(nèi)容覆蓋文件中原有的內(nèi)容;
    兩種方式創(chuàng)建文件
fs.writeFile("2.txt","我是2.txt文件",{flag:"a"},function (err) {
    if(err){
        console.log(err);
    }else {
        console.log("寫入成功");
    }
})
fs.appendFile("2.txt","我是追加的字符",function(err){
    if(err) {
        return console.log(err);
    }else{
        console.log("追加成功");
    }
})

上面是異步創(chuàng)建掷空,每個文件操作的函數(shù)都有異步和同步兩種肋殴,所有同步的函數(shù)都是異步函數(shù)后面加Sync,這里以writeFileSync為例拣帽,說一下同步的函數(shù)寫法疼电,其他函數(shù)寫法類似,就不一一細(xì)說了减拭。
同步函數(shù)寫法比異步簡單蔽豺,寫入成功無返回值,不需要回調(diào)函數(shù):

var res = fs.writeFileSync("1.txt","我是寫入的內(nèi)容333");

2. 文件的讀取

使用readFile拧粪,第一個參數(shù):文件名修陡,第二個為回調(diào)函數(shù),回調(diào)函數(shù)返回兩個參數(shù)err,data
err:返回錯誤信息可霎;data:返回文件內(nèi)容

fs.readFile("1.txt",function(err,data){
    if(err){
        console.log(err);
    }else{
        console.log(data.toString());
    }
})

3. 文件的修改

這里的文件修改不是對文件的內(nèi)容經(jīng)行修改魄鸦,只是對文件名的修改,下面代碼就是將『1.txt』的文件名修改成『2.txt』癣朗。

fs.rename("1.txt","5.txt",function(err){
    if(err){
        return console.log(err);
    }else{
        console.log("修改成功");
    }
});

4. 文件刪除

與php類似拾因,使用unlink刪除

fs.unlink("2.txt",function(err){
    if(err){
        return console.log(err);
    }else{
        console.log("刪除成功");
    }
});

5. 復(fù)制

node.js的文件操作沒有特定的函數(shù),不過我們可以自己寫一個函數(shù)來復(fù)制文件

  1. 異步函數(shù)封裝的復(fù)制函數(shù)
function mycopy(path1,path2) {
    fs.readFile(path1,function(err,data){
        if(err){
            console.log(err);
        }else{
            var data1 = data.toString();
            fs.writeFile(path2,data1,function(err){
                if(err){
                    console.log(err);
                }else{
                    console.log("復(fù)制成功");
                }
            })
        }
    })
}
  1. 使用同步函數(shù)更加簡單,就一行代碼
function mycopy(src,dest){
    fs.writeFileSync(dest,fs.readFileSync(src));
}

二绢记、文件夾的操作

對于文件夾的操作扁达,要了解mode的三個數(shù)字的含義:mode 的三個數(shù)字,分別表示owner(所有者)蠢熄,group(組用戶),others(其他用戶)所具有的權(quán)限跪解。

  • 1 = x 執(zhí)行;
  • 2 = w 寫签孔;
  • 4 = r 讀叉讥;
    比如owner具有所有權(quán)限,1+2+4=7, 又比如group 具有讀 和執(zhí)行權(quán)限 1+4 = 5

1. 目錄創(chuàng)建

777代表擁有所有權(quán)限饥追,前面的0是代表八進制图仓,無其他意義。
下面代碼的意思是創(chuàng)建了一個名為"33"的文件夾

fs.mkdir("33",0777,function (err) {
    if(err){
        return console.log(err);
    }else{
        console.log("創(chuàng)建成功");
    }
})

2. 修改文件夾權(quán)限

fs.chmod("22",0777,function (err) {
    if(err){
        console.log(err);
    }else{
        console.log("修改權(quán)限成功");
    }
})

3. 重命名文件夾

把"11"文件夾重命名為"22"

fs.rename("11","33",function(err){
    if(err){
        return console.log(err);
    }else{
        console.log("修改成功");
    }
})

4. 讀取文件夾

回調(diào)函數(shù)返回的data是數(shù)組判耕,存的是文件夾里的文件或者文件夾名稱

fs.readdir("22",function(err,data){
    if(err){
        return console.log(err);
    }else{
        console.log(data);
    }
})

5. 判斷文件或者文件夾是否存在

往往在新建文件夾之前得判斷文件夾是否存在透绩,若不存在才新建,此時使用exists來判斷

fs.exists("22",function(exists){
    if(exists){
        console.log("文件夾已經(jīng)存在");
    }else{
        // noinspection JSAnnotator
        fs.mkdir("22",0777,function(err){
            if(err){
                return console.log(err);
            }else{
                console.log("創(chuàng)建成功");
            }
        })
    }
})

6. 顯示文件的詳細(xì)信息壁熄,針對詳細(xì)信息來判斷是否是文件夾

詳細(xì)信息的函數(shù)是stat,返回的參數(shù)data;
data.ifFile() 判斷是否是文件
data.isDirectory() 判斷是否是文件夾

fs.stat("22",function(err,data){
    if(err){
        return console.log(err);
    }else{
        console.log(data);
        //    判斷是否是文件
        //   判斷是否是文件夾
        //   data.isDirectory();
       var res = data.isFile();
       if(res){
           console.log("是文件");
       }else {
           console.log("是文件夾");
       }
    }
});

7. 文件夾的刪除

系統(tǒng)自帶的刪除函數(shù)是rmdir,但是這個函數(shù)沒有多大用,因為他只能刪除空的文件夾碳竟,往往在應(yīng)用中草丧,我們都是需要刪除不是空的文件夾。所以刪除文件夾的函數(shù)得自己寫莹桅。系統(tǒng)沒提供這個函數(shù)昌执,但肯定難不倒我們這些程序員啊,畢竟這些封裝好的底層函數(shù)也是那些大牛程序員寫出來的啊诈泼。
這個刪除函數(shù)只能刪除空的文件夾:

fs.rmdir("22",function(err){
    if(err){
        return console.log(err);
    }else{
        console.log("刪除成功");
    }
})

接下來可以自己封裝一個刪除文件夾的函數(shù)懂拾,能刪除文件夾里的所有文件

function removeDir(src) {
    //  獲取文件夾里的內(nèi)容
    var arr = fs.readdirSync(src);
    console.log(arr);
    //  判斷是否是文件,如果是文件刪除铐达;如果是文件夾在執(zhí)行相同的過程
    for(var i = 0 ; i< arr.length ;i++){
    //    子文件的詳細(xì)信息
    //    組裝文件或者文件夾的路徑
        var url = src+"/"+arr[i];
        var data = fs.statSync(url);
        // 判斷每個元素是文件或者是文件夾
        if(data.isFile()){
            fs.unlinkSync(url);
        }else{
            removeDir(url);
        }
    }
    // 刪除空文件夾
    fs.rmdirSync(src);
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末岖赋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子瓮孙,更是在濱河造成了極大的恐慌唐断,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杭抠,死亡現(xiàn)場離奇詭異脸甘,居然都是意外死亡,警方通過查閱死者的電腦和手機偏灿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門丹诀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事铆遭”馀海” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵疚脐,是天一觀的道長亿柑。 經(jīng)常有香客問我,道長棍弄,這世上最難降的妖魔是什么望薄? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮呼畸,結(jié)果婚禮上痕支,老公的妹妹穿的比我還像新娘。我一直安慰自己蛮原,他們只是感情好卧须,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著儒陨,像睡著了一般花嘶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蹦漠,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天椭员,我揣著相機與錄音,去河邊找鬼笛园。 笑死隘击,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的研铆。 我是一名探鬼主播埋同,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼棵红!你這毒婦竟也來了凶赁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤窄赋,失蹤者是張志新(化名)和其女友劉穎哟冬,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體忆绰,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡浩峡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了错敢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翰灾。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡缕粹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纸淮,到底是詐尸還是另有隱情平斩,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布咽块,位于F島的核電站绘面,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏侈沪。R本人自食惡果不足惜揭璃,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望亭罪。 院中可真熱鬧瘦馍,春花似錦、人聲如沸应役。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽箩祥。三九已至院崇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間滥比,已是汗流浹背亚脆。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盲泛,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓键耕,卻偏偏與公主長得像寺滚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子屈雄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

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

  • 這真的是一篇跨年的文章了村视,好長,一邊看酒奶,一邊跟著敲代碼驗證蚁孔,那么,問題來了惋嚎,你和誰一起跨年了(機智臉)杠氢? 在Nod...
    范小飯_閱讀 1,253評論 3 8
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)另伍,斷路器鼻百,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • 文件系統(tǒng)模塊是一個封裝了標(biāo)準(zhǔn)的 POSIX 文件 I/O 操作的集合。通過require('fs')使用這個模塊。...
    保川閱讀 779評論 0 0
  • 第一版 之前公司做了一個類似于知乎小圓桌的頁面,但是寫完一直感覺有些地方不夠好,所以就拿Swift重新寫了一遍,如...
    軒轅小羽閱讀 4,687評論 11 55
  • 報了課嘗試一下鋼筆畫温艇,線稿部分把握的還行因悲。 可能是顏料不是很好,我用的馬利24色固彩勺爱,總感覺顏色太淡晃琳,不透,畫出來...
    多蘿格格閱讀 534評論 4 13