(三)fs檔案操作模組

weixin_34402408發表於2017-12-03

fs模組用於檔案的讀寫等操作。
該模組有如下這些方法:

1、fs.stat() : 檢測是檔案還是目錄

const fs = require('fs');

fs.stat('test.html',function(err,stats){
    if(err){
        console.log(err);
    }else{
        console.log('檔案:' + stats.isFile());        //true
        console.log('目錄:' + stats.isDirectory());   //false
    }
});

2、fs.mkdir():建立目錄

接受如下幾個引數:

  • path :將建立的目錄路徑
  • mode :目錄許可權(讀寫許可權),預設0777
  • callback :回撥,傳遞異常引數err
fs.mkdir('css',function(err){
    if(err){
        console.log(err);
    }else{
        console.log("建立成功");
    }
});

3、fs.writeFile():寫入檔案

  • filename (String) 檔名稱
  • data (String | Buffer) 將要寫入的內容,可以使字串 或 buffer資料。
  • options (Object) option陣列物件,包含 :
    • · encoding (string) 可選值,預設 ‘utf8′,當data使buffer時,該值應該為 ignored。
    • · mode (Number) 檔案讀寫許可權,預設值 438
    • · flag (String) 預設值 ‘w'
  • callback {Function} 回撥,傳遞一個異常引數err。
var str = "Hello Node.js";
fs.writeFile('write.txt', str, 'utf8', function (err) {
    if (err) {
        console.log(err);
    }else{
        console.log("建立成功");
    }
});

如果該檔案不存在則建立該名稱檔案並寫入資料。如果多次寫入的話,那麼後面寫入的內容會覆蓋前面寫入的內容。

4、fs.appendFile():追加檔案

用法與writeFile相同,只是對此寫入的話不會覆蓋之前的資料,而是在其後追加資料。

5、fs.readFile() :讀取檔案

回撥函式中的data即包含了讀取的資料。

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

6、fs.readdir():讀取目錄,獲取目錄下面的檔案和資料夾。

fs.readdir('css',function(err,data){
    if (err){
        console.log(err);
    }else{
        console.log(data);
    }
});

不過這樣只能獲取第一級目錄

7、fs.rename():重新命名檔案

fs.rename('html/index.html','html/news.html',function(err){
  if (err) {
    console.log(err);
  } else {
    console.log('修改名字成功');
  }
})

這樣就可以把index.html檔名修改為news.html

這個方法還可以實現檔案剪下功能:

fs.rename('html/css/basic.css','html/style.css',function(err){

    if(err){
     console.log(err);
     return false;
   }
   console.log('剪下成功');
})

這樣就可以把html/css/basic.css剪下到html/style.css

8、fs.redir():刪除目錄

fs.rmdir('text',function(err){
     if(err){
      console.log(err);

      return false;
    }
   console.log('刪除目錄成功');
})

這裡的刪除只能刪除空目錄。

9、fs.unlink():刪除檔案

fs.unlink('index.txt',function(err){

       if(err){
          console.log(err);
          return false;
     }
    console.log('刪除檔案成功');
})

10、fs.createReadStream():以流的方式讀取資料

這種方式讀取檔案是分塊讀取的

// 建立一個可以讀取的流,讀取檔案 input.txt 中
var readStream=fs.createReadStream('input.txt');

var str='';/*儲存資料*/
var count=0;  /*次數*/

//觸發data事件,開始取讀資料
readStream.on('data',function(chunk){
    str+=chunk;
    count++;
})

//觸發end事件,讀取完成
readStream.on('end',function(chunk){
    console.log(count);
    console.log(str);
})

//讀取失敗
readStream.on('error',function(err){
    console.log(err);
})

這種讀取方式很高效,適合取讀大批量資料。如果所讀資料量不是很大的話使用上面的readFile方法即可。

11、fs.createWriteStream():以流的方式寫入檔案

var data = '我是從資料庫獲取的資料,我要儲存到檔案中去\n';

// 建立一個可以寫入的流,寫入到檔案 output.txt 中
var writerStream = fs.createWriteStream('output.txt');

//開始寫入資料
writerStream.write(data,'utf8');

//標記寫入完成
writerStream.end();

//觸發finish事件,完成寫入
writerStream.on('finish',function(){
    console.log('寫入完成');
})

//失敗
writerStream.on('error',function(){
    console.log('寫入失敗');
})

同樣,如果要寫入的檔案不存在就建立該檔案再寫入。

12、管道流讀取

管道提供了一個輸出流到輸入流的機制。通常我們用於從一個流中獲取資料並將資料傳遞到另外的一個流中。

// 建立一個可讀流,這是管道的輸出端
var readerStream = fs.createReadStream('input.txt');

// 建立一個可寫流,這是管道的輸入端
var writerStream = fs.createWriteStream('output.txt');

// 管道讀寫操作
// 讀取 input.txt 檔案內容,並將內容寫入到 output.txt 檔案中
readerStream.pipe(writerStream);

console.log("程式執行完畢");

相關文章