node(3)

常用模块

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"));
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • Node.js 常用工具 util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaScr...
    FTOLsXD阅读 530评论 0 2
  • //公共引用 varfs =require('fs'), path =require('path'); 1、读取文...
    才気莮孒阅读 826评论 0 1
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    w_zhuan阅读 3,607评论 2 41
  • 个人入门学习用笔记、不过多作为参考依据。如有错误欢迎斧正 目录 简书好像不支持锚点、复制搜索(反正也是写给我自己看...
    kirito_song阅读 2,449评论 1 37
  • 文件系统模块是一个封装了标准的 POSIX 文件 I/O 操作的集合。通过require('fs')使用这个模块。...
    保川阅读 773评论 0 0