1. 程式人生 > >三、fs文件操作模塊

三、fs文件操作模塊

object back 覆蓋 test ole fs模塊 異常 數據傳遞 string

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("程序執行完畢");

三、fs文件操作模塊