美文网首页
node(3)

node(3)

作者: big5 | 来源:发表于2016-07-19 17:20 被阅读10次

常用模块

fs模块

文件读取

  • 异步读取文件内容

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

});

* 同步读取文件内容    

    ```   
    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", "家乐福卡的设计费可拉伸的机发送的", function (err) {
if (err) {
console.log(err);
return;
}
console.log("文件写入成功");
});

其中通过writeFile写入文件中的"flag:a"是表示追加文件内容。w是写入会覆盖原文件  
  
* 文件复制  
   在nodojs中没有文件复制的函数。通过文件写入和读取封装,实现文件复制。  
     
   ``` 
   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("文件赋值成功");
           });
       });
   }
   ```    
   
#### 目录操作  
* 创建目录      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为一个数组,保存所有文件的名称
    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([])); // 验证数组
    console.log(util.isRegExp(/\d/)); // 验证正则表达式  
    
  • 继承
    继承原型的内容,而不继承自身的内容

        // 实现继承
    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 = "呵呵";
    }
    // 实现继承
    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模块

  • 上一节对事件做过一定的阐明。下面是一些用法的补充。

    • 获取事件模块的两种方法
    • 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("不吃了好么");
    });  
    
  • 事件触发

    • obj.emit("eventName");

      girl.emit("ele");  
      
  • 在事件绑定中可以绑定后只触发一个
    obj.once(“eventName”, function);

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

buffer类

  • 缓存区:暂时存放区类的一段数据

  • js自身只有字符串,没有二进制类型,在处理文件是需要用二进制数据,因此node中定义buffer类

  • 是由一个八位字节四个字节元素组成的数组,单位是16进制。

  • buffer的相关方法

    • 创建长度为12buff

          // 创建长度为12的数组
      var buff = new Buffer(12);
      
      // (填充的值,开始位置,结束位置(没有既全部))
      buff.fill(255, 0, 4);
      
      console.log(buff);  
      
    • 数组创建

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

       var buff = new Buffer("李大泽");
        console.log(buff);  
      
    • 将buffer转为字符串

          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,但是会占用过高内存
    
    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

  • 简介
    流的作用跟数据的处理密不可分。

  • 处理方法
    创建 readStream 和 writeStream,将文件作为一小块一小块的数据流进行处理,而不是一整块技术

    var fs = require('fs');
    
    var rs = fs.createReadStream("data.json");
    var ws = fs.createWriteStream("data2.json");
    
    rs.on("data", function (chunk) {
        console.log("数据读取中。。。。");
    
        ws.write(chunk, function () {
            console.log("数据写入成功");
        });
    });
    rs.on("end", function () {
        console.log("数据读取完毕");
    });  
    

    pipe 连接连个数据流,如管道一样将数据读入写入

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

path 模块

  • 获取当前路径 __dirname
  • 规范化字符串路径 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"));
    

相关文章

网友评论

      本文标题:node(3)

      本文链接:https://www.haomeiwen.com/subject/dcomjttx.html