node(3)

常用模塊

fs模塊

文件讀取

  • 異步讀取文件內(nèi)容

    fs.readFile("1.txt", "utf-8", function (err, data) {
      if (err) {
          console.error(err);
          return;
      }
      console.log(data);
    

});

* 同步讀取文件內(nèi)容    

    ```   
    var data = fs.readFileSync("1.txt", "utf-8");
    console.log("data: " + data);  
    ```     
     
#### 文件寫入  
  * 通過writeFile寫入文件
    
    ```  
    fs.writeFile("2.txt", "哈哈哈哈哈哈哈哈,我會進入文件中", {
        flag: "a"
    }, function (err) {
        if (err) {
            console.error(err);
            return;
        }
        console.log("文件寫入成功");
    });  
    ```  
* appendFile 寫入文件  
  

fs.appendFile("3.txt", "家樂??ǖ脑O計費可拉伸的機發(fā)送的", function (err) {
if (err) {
console.log(err);
return;
}
console.log("文件寫入成功");
});

其中通過writeFile寫入文件中的"flag:a"是表示追加文件內(nèi)容。w是寫入會覆蓋原文件  
  
* 文件復制  
   在nodojs中沒有文件復制的函數(shù)。通過文件寫入和讀取封裝,實現(xiàn)文件復制。  
     
   ``` 
   var fs = require("fs");
   function copy(source,des){
       fs.readFile(source, "utf-8", function (err, data) {
           if (err) {
               console.error(err);
               return;
           }
           
           // 寫入文件
           fs.writeFile(des, data, {
               flag: "w",
               encoding: "utf-8"
           }, function (err) {
               if (err) {
                   console.error(err);
                   return;
               }
               console.log("文件賦值成功");
           });
       });
   }
   ```    
   
#### 目錄操作  
* 創(chuàng)建目錄      mkdir     

   ```  
   var fs = require('fs');
   fs.mkdir("dirName", 0777, function (err) {
       if (err) {
           console.error(err);
       }
   });  
   ```  
* 讀取目錄    readdir
 
var fs = require('fs');
fs.readdir("test", function (err, files) {
    if (err) {
        console.error(err);
        return;
    }
    
    // files為一個數(shù)組,保存所有文件的名稱
    console.log(files);
});
```    
  • 判斷文件是否存在 exists

    fs.exists("test/test7", function (res) {
      console.log(res);
      });  
        
    
  • 查看目錄或者文件詳情 stat

    fs.stat("test/hah.txt", function (err, stat) {
          if (err) {
              console.error(err);
              return;
          }
      
          console.log(stat);
      });  
    
  • 修改文件名 rename

    fs.rename("test", "testttttttt", function (err) {
      if (err) {
          console.error(err);
          return;
      }
      console.log("名稱修改成功");
    });  
    
  • 相對路徑獲取絕對路徑

    fs.realpath("test", function (err, path) {
        if (err) {
            console.error(err);
            return;
        }
        console.log(path);
    });  
    

util 模塊

  • 類型驗證

    console.log(util.isArray([])); // 驗證數(shù)組
    console.log(util.isRegExp(/\d/)); // 驗證正則表達式  
    
  • 繼承
    繼承原型的內(nèi)容,而不繼承自身的內(nèi)容

        // 實現(xiàn)繼承
    function Person() {
        this.name = "哈哈";
        this.age = 30;
        this.say = function () {
            console.log(this.name);
        };
    }
    
    Person.prototype.showAge = function () {
        console.log(this.age);
    };
    
    function Student() {
        Person.apply(this, arguments);
        this.name = "呵呵";
    }
    // 實現(xiàn)繼承
    Student.prototype = Person.prototype
    //uti.inherits(Student,Person) 的作用和上面的原型賦值一樣
    util.inherits(Student, Person);
    
    Student.prototype.show = function() {
        console.log("haha");
    };
    
    var personObj = new Person();
    var studentObj = new Student();
    
    studentObj.say();
    studentObj.showAge();
    studentObj.show();  
    
    

事件 events模塊

  • 上一節(jié)對事件做過一定的闡明。下面是一些用法的補充。

    • 獲取事件模塊的兩種方法
    • var events = require('events').EventEmitter(); // 舊的寫法
    • var events = require('events'); // 新的寫法
  • 綁定事件的方法

    • obj.on('eventName',function);

      girl.on("ele", function () {
            console.log("餓著吧");
        });  
      
    * obj.addlistener('eventName",function)  
     
     ```  
     girl.addListener("ele", function () {
       console.log("不吃了好么");
    });  
    
  • 事件觸發(fā)

    • obj.emit("eventName");

      girl.emit("ele");  
      
  • 在事件綁定中可以綁定后只觸發(fā)一個
    obj.once(“eventName”, function);

    girl.once("die", function () {
    console.log("哈哈哈");
    });  
    

buffer類

  • 緩存區(qū):暫時存放區(qū)類的一段數(shù)據(jù)

  • js自身只有字符串,沒有二進制類型,在處理文件是需要用二進制數(shù)據(jù),因此node中定義buffer類

  • 是由一個八位字節(jié)四個字節(jié)元素組成的數(shù)組,單位是16進制。

  • buffer的相關方法

    • 創(chuàng)建長度為12buff

          // 創(chuàng)建長度為12的數(shù)組
      var buff = new Buffer(12);
      
      // (填充的值,開始位置,結束位置(沒有既全部))
      buff.fill(255, 0, 4);
      
      console.log(buff);  
      
    • 數(shù)組創(chuàng)建

      var buff = new Buffer([1, 2, 3]);
       console.log(buff);  
      
    • 字符串創(chuàng)建

       var buff = new Buffer("李大澤");
        console.log(buff);  
      
    • 將buffer轉(zhuǎn)為字符串

          var buff = new Buffer([0xe6, 0x9d, 0x8e, 0xe5, 0xa4, 0xa7, 0xe6, 0xb3, 0xbd]);
          console.log(buff.toString());  
      
    • buffer連接

    var buff1 = new Buffer([0xe6, 0x9d, 0x8e, 0xe5]);
    var buff2 = new Buffer([0xa4, 0xa7, 0xe6, 0xb3, 0xbd]);
    
    var buff3 = Buffer.concat([buff1, buff2]); // 連接兩個buff,但是會占用過高內(nèi)存
    
    console.log(buff1.toString());
    console.log(buff2.toString());
    console.log(buff3.toString());
    
    
    // Node中推薦的方式
    var StringDecoder = require('string_decoder').StringDecoder;
    var decoder = new StringDecoder();
    console.log(decoder.write(buff1));
    console.log(decoder.write(buff2));    
    

stream

  • 簡介
    流的作用跟數(shù)據(jù)的處理密不可分。

  • 處理方法
    創(chuàng)建 readStream 和 writeStream,將文件作為一小塊一小塊的數(shù)據(jù)流進行處理,而不是一整塊技術

    var fs = require('fs');
    
    var rs = fs.createReadStream("data.json");
    var ws = fs.createWriteStream("data2.json");
    
    rs.on("data", function (chunk) {
        console.log("數(shù)據(jù)讀取中。。。。");
    
        ws.write(chunk, function () {
            console.log("數(shù)據(jù)寫入成功");
        });
    });
    rs.on("end", function () {
        console.log("數(shù)據(jù)讀取完畢");
    });  
    

    pipe 連接連個數(shù)據(jù)流,如管道一樣將數(shù)據(jù)讀入寫入

    ```  
      var fs = require('fs');
      var rs = fs.createReadStream("data.json");
      var ws = fs.createWriteStream("data3.json");
      rs.pipe(ws);  
    ```
    

path 模塊

  • 獲取當前路徑 __dirname
  • 規(guī)范化字符串路徑 normalize
  • 拼接路徑 join
  • 解析為絕對路徑 resolve
    .代表當前目錄
    ..代表上級目錄
    /代表下級分割
    var fs = require('fs');
    
    var path = require('path');
    
    var file1 = path.normalize("./../a///b/c/../d//");
    console.log(file1);
    
    console.log(__dirname);
    
    var file2 = path.join(__dirname, "a", "b", "..", "c");
    console.log(file2);
    
    //
    // console.log(path.resolve("./test/index.html"));
    // console.log(path.resolve("www", "root", "../css/common.css"));
    // console.log(path.resolve("../7.fs/img.js"));
    
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Node.js 常用工具 util 是一個Node.js 核心模塊,提供常用函數(shù)的集合,用于彌補核心JavaScr...
    FTOLsXD閱讀 606評論 0 2
  • //公共引用 varfs =require('fs'), path =require('path'); 1、讀取文...
    才気莮孒閱讀 888評論 0 1
  • Node.js是目前非常火熱的技術,但是它的誕生經(jīng)歷卻很奇特。 眾所周知,在Netscape設計出JavaScri...
    w_zhuan閱讀 3,724評論 2 41
  • 個人入門學習用筆記、不過多作為參考依據(jù)。如有錯誤歡迎斧正 目錄 簡書好像不支持錨點、復制搜索(反正也是寫給我自己看...
    kirito_song閱讀 2,648評論 1 37
  • 文件系統(tǒng)模塊是一個封裝了標準的 POSIX 文件 I/O 操作的集合。通過require('fs')使用這個模塊。...
    保川閱讀 925評論 0 0

友情鏈接更多精彩內(nèi)容