node.js 基础和文件操作 笔记

  • 模块化:

    在node中,一个js就是一个模块。

    通过require()引用外部模块。如果是相对路径,需要用./或者..来开头。

    一个文件就是一个模块,有一个假想的函数包着,所以想要在外部调用,需要用export.x

  • 可以引用的模块包括

    • 核心模块,直接写名字就行了。

    ​ 就比如fs模块

    • 文件模块
  • js中的window在这里是global

  • 建议用module.exports.xxx的方式,声明可以外部调用。

  • npm的一些操作

    • npm -v 查看npm的版本
    • npm version 查看所有模块的版本
    • npm search 包名 搜索名
    • npm install 包名 安装包(可以用i代替install)
    • npm install 包名 --save 安装包并添加到依赖中
    • npm remove 包名 删除包 (可以用r替代remove)
    • npm install 下载当前项目所依赖的包
    • npm install 包名 -g 全局安装包(一般都是工具)
  • Node 基础

    • 缓冲区buffer的概念

      var buf = Buffer.from(str);
      var buf2 = Buffer.alloc(10);
      
      • buffer的大小确定后,不会修改。

      • 实际使用16进制存储的,但是输出到控制台等会现实成10进制。

      • Buffer.from(str) 将一个字符串转化为buffer

      • Buffer.toString() 将缓存区的数据转化为字符串

    • 文件系统

      • 通过node来操作系统中的文件。

      • var fs = require("fs");
        
      • 一般都是两组,一个带sync同步,不带是异步的。

      • 同步文件的写入

      • var fd = fs.openSync("xxx.txt", "w");
        fs.writeSync(fd, "今天天气不错");
        fs.closeSync(fd);
        
      • 异步文件写入

        • 性能相对较好
        • 结果通过回调函数返回
        • 回调函数两个参数:
          • err 错误对象
          • fd文件的描述符
        • 异步在后面执行,回调函数中的代码后执行
      • //多一个回调函数 ,异步方法没有返回值
        fs.open("xxx2.txt", "w",function(err, fd){
            if(!err){
        			fs.write(fd, "今天天气不错" ,function(err){
                if(!err){
                  .写入成功.
                }
              });
        			fs.closeSync(fd,function(err){
                if(!err){
                   .文件成功关闭.
                }
              });
            }else {
              console.log(err);
            }
        });
        
      • 简单文件写入

        • var fs = require("fs");
          fs.writeFile("hello3.txt", "这是通过writeFile写入的内容",{flag:"w"},function(err){
            if(!err){
              console.log("写入成功...");
            }
          });
          
      • 流式文件写入

        • 适合大文件的写入

        • on(事件字符串,回调函数)

        • once(事件字符串,回调函数)绑定一个一次性的

        • var ws = fs.createWriteStream("Hello3.txt");
          ws.once("open", function(){
            console.log("233");
          })
          ws.once("close", function(){
            console.log("233");
          })
          ws.write("通过可写流写入文件的内容");
          ws.write("通过可写流写入文件的内容");
          ws.write("通过可写流写入文件的内容");
          
          ws.end();
          //不要用ws.close(),拔掉水管的那一头
          
      • 同步文件读取

      • 异步文件读取

      • 简单文件读取

        var fs = require("fs");
        fs.readFile("hello3.txt", function(err, data){
          if(!err) {
            console.log(data);
        		//也可以整合上面的writeFile
          }
        })
        
      • 流式文件读取

        • 可以分多次把一个大文件读取到内存中。

        • var fs = require("fs");
          var rs = fs.createReadStream("an.jpg");
          //监听流的开启和关闭
          rs.once("open", function(){
            console.log("可读流打开了~~~");
          });
          rs.once("close", function(){
            console.log("可读流关闭了~~~");
          });
          
          //为data绑定事件,就可以自动运行
          rs.on("data", function(){
            //实现复制的效果。
            ws.write(date);
          });
          
          //传输数据,还可以用pipe简化
          rs.pipe(ws);
          
      • 文件操作的其他一些方法

        • fs.stat("a.mp3", function(err, stat){
          	//查看是不是文件、目录
            console.log(stat.isFile());
            console.log(stat.isDirectory());
            
          });
          //删除文件
          fs.unlinkSync("hello.txt");
          //读取当前文件目录结构
          fs.readdir(".", function(err, files){
            if(!err){
              console.log(files);
            }
          });
          
          //截断文件,将文件前3个留下来。
          fs.truncateSync("hello2.txt", 3);
          //创建文件夹
          fs.mkdirSync("hello");
          //删除文件夹
          fs.rmdirSync("hello");
          //重命名,前两个是目录字符串
          fs.rename("a.mp3", "笔记.mp3",function(err) {
            if(!err){
              console.log("修改成功~~~");
            }
          });
          
          //监视文件的修改,回调函数,当文件发生变化的,被执行。
          //运行起来,就会一直运行,不会停。
          //拥有定时机制
          fs.watchFile("hello2.txt",{interval:1000},function(curr, prev){
            //上面两个参数,都是stat类型的。
            console.log("文件发生了变化");
          });
          
          
posted @ 2020-04-05 14:42  ckxkexing  阅读(131)  评论(0编辑  收藏  举报