文件操做和網絡通訊

爲何要進行文件操做

  • 瀏覽器端JavaScript不能操做文件(安全性考慮)
  • Node.js須要文件操做,由於
    • 能夠開發命令行的工具,例如:i5ting
    • 開發高效率的web服務器,須要操做文件
  • 文件種類繁多,計算機最終存儲的時候都是以2進制形式存儲
  • 存儲單位
    • 1byte = 8bit
    • 1k =
    • 1m = 1024k

 

Buffer對象

  • Buffer
    • Buffer對象是一個像Array的對象,主要存儲字節
    • Node.js做爲後端開發,須要處理圖片、js、css等文件,圖片等資源是以二進制形式存在的,因此在Node.js中增長了一個buffer對象,專門用來存放二進制數據
    • Buffer對象其實就是在內存中申請一塊空間,用於存放數據
  • Buffer對象的使用(瞭解)javascript

    • 第一種建立方式
      //開闢4個字節的空間存儲數據
      let buffer = new Buffer(4);
      //建立完成後,buffer分配的內存可能有數據
      //清空buffer對象
      buffer.fill(0);

       

    • 第二種建立方式
      //直接存儲數據在buffer中
      let buffer = new Buffer("hello itcast");

       

    • 讀取文件中遇到的Buffercss

      var fs = require("fs");
      fs.readFile("01-buffer.js", function (err,content) {
        //此處的content就是Buffer
        console.log(content);
      });
      
      fs.readFile("01-buffer.js","utf8", function (err,content) {
        //指定了編碼後,獲取到的content是字符串
        console.log(content);
      });

       

    • Buffer支持的編碼java

      • ascii
      • utf8 默認
      • utf16
      • ucs2
      • base64
      • hex
      • Binary
    • 支持gb2312-第三方包 iconv-litenode

    • Buffer的常見方法web

      • buf.write() 往buffer寫入內容
      • buf.toString([編碼]) 把buffer中的內容轉換成字符串
      • buf.length 獲取buffer的長度
      • Buffer.isEncoding("utf8") 檢查支持的編碼(不支持gb2312)
  • File Systemnpm

    • 操做文件夾編程

      • mkdirSync() 同步建立文件夾
      • mkdir() 異步建立文件夾後端

      • rmdirSync() 同步刪除文件夾瀏覽器

      • rmdir() 異步刪除文件夾安全

      • 判斷文件是否存在

    • 操做文件

      • writeFile() 寫入文件,會覆蓋之前的內容
      • appendFile() 追加文件
      • readFile() 讀取文件
      • rename() 更改文件名
      • unlink() 刪除文件
      • stat() 獲取文件的相關屬性

      • watchFile() 監控文件或文件夾內文件的改變

    • 練習:監視文件abc/abc.txt,若是文件發生變化把內容拷貝到target/123.txt

    • 拷貝文件:

      • 以前的方式只能拷貝小文件
      • 拷貝大文件
    • 文件流操做

      • createReadStream()
      • createWriteStream()
      • 拷貝大文件帶進度

        ```javascript "use strict"

        const fs = require("fs");

        let sourceFile ="xdy.avi"; let targetFile = "123.itcast";

        //文件流讀寫 進行大文件複製 //建立讀流對象 let rs = fs.createReadStream(sourceFile); //建立寫流對象 let ws = fs.createWriteStream(targetFile);

//文件大小
    let fileSize = fs.statSync(sourceFile).size;

    //總共寫入的大小
    let writeTotal = 0;

    //監聽data事件
    rs.on("data", chunk => {
        //每次讀到的數據  buffer對象

        writeTotal += chunk.length;


        //把chunk寫入目標文件
        ws.write(chunk);

        console.log(writeTotal/fileSize * 100);
    });

    //讀取完畢
    rs.on("end", ()=>{
        console.log("文件讀取完畢");

        //寫入結束
        ws.end(()=>{
            console.log("文件寫入完畢");
        });
    });
    ```

    - 管道拷貝大文件

    ```javascript
    "use strict"
    const fs = require("fs");

    let sourceFile ="xdy.avi";
    let targetFile = "123.itcast";

    let rs = fs.createReadStream(sourceFile);
    let ws = fs.createWriteStream(targetFile);

    rs.pipe(ws);
    ```

 

 

Node.js的異步編程

  • 同步和異步的概念
  • 非阻塞式I/O
  • 事件驅動
  • 回調函數
  • 監視js的變化從新運行的插件 npm install nodemon -g
    • 使用 nodemon js文件路徑
相關文章
相關標籤/搜索