文件操做和网络通讯

为何要进行文件操做

  • 浏览器端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文件路径
相关文章
相关标签/搜索