Node.js学习教程01

Node.js简介

  • Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型。
  • Node 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言。
  • 发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。
    Node对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好。V8引擎执行Javascript的速度非常快,性能非常好。
  • Node是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。

下载安装

Node.js 安装包及源码下载地址为:https://nodejs.org/en/download/

Node.js最大的特点就是异步式I/O(或者非阻塞I/O)与事件紧密结合的编程模式。这种模式与传统的同步式I/O线性的编程思路有很大的不同,因为控制流很大程度上要靠事件和回调函数来组织,一个逻辑要拆分为若干个单元。

fs

node 操作文件流 fs 同步与异步 流式文件的写入与读取

fs ( File System ) 文件系统

在node中通过fs模块来和系统中的文件进行交互
通过fs模块可以对磁盘中的文件做各种增删改查的操作

    写入文件
        1.同步写入
        2.异步写入
        3.简单写入
        4.流式写入

    读取文件

        在fs模块中所有的方法都有两个版本
            不带sync的,异步方法
            带sync的,同步方法

1.同步写入

**1.打开要写入的文件**
    fs.openSync(path, flags[, mode])
    该方法用来打开一个文件
    参数:
    path:路径,要打开文件的路径
    flags:操作的类型,要对文件做什么操作
    需要字符串作为参数
    "w" 写
    "r" 读
    "a" 追加
    mode:可选参数,一般不传,用来设置文件的权限

    返回值:
    fd 文件的描述符

2.写入并保存
    fs.writeSync(fd, string[, position[, encoding]])
    该方法用于向文件中写入内容
    参数:
    fd: 文件的描述符,需要指定要写入文件的描述符
    string: 要写入的内容
    position: 开始写入的位置
    encoding: 写入内容的字符编码,默认utf-8


3.关闭文件
    fs.closeSync(fd):: 该方法用来关闭文件
    参数:
    fd 文件的描述符

实例
    //引入fs模块
    var fs=require('fs');
    var fd=fs.openSync('gzl.txt','w');
    fs.writeSync(fd,'1111',10,'utf-8');
    fs.closeSync(fd);

2.简单文件的写入

简单文件写入
     fs.writeFile(file, data[, options], callback)
     fs.writeFileSync(file, data[, options])
 - 参数:
        file 要写入的文件的路径
        data 要写入的内容
        options 配置对象(可选)
            encoding 编码 默认 utf8
            flag  操作类型  默认 w
            mode  文件的权限 默认666,一般不需要传
            callback 回调函数,写入完成后会调用该函数

3.异步写入

1.打开文件
    fs.open(path, flags[, mode], callback)
    参数:callback
    回调函数,会在文件打开以后执行
    回调函数中会有两个参数:
    err: 错误信息,如果操作过程中出现了错误,则该对象存在,如果没有出现错误,则该参数的值为null
    错误优先
    fd: 文件的描述符

2.写入文件
    fs.write(fd, string[, position[, encoding]], callback)
    callback 回调函数会在写入完毕以后执行
    参数:
    err 错误对象
    byte 写入的字节数
    data 写入的数据

3.关闭文件
    fs.close(fd, callback)

异步写入的相关代码:::
var fs=require('fs');
fs.open('gzl.txt','a',function (err,fd) {
    if (!err){
        fs.write(fd,'ffffff',10,function (err,bite,data) {
          if (!err){
              console.log('文件写入成功');
          };
          fs.close(fd,function (err) {
            if (!err){
                console.log('文件已关闭');
            };
          });
        });
    };
});

4.流式文件的写入与读取流式文件写入

流式文件写入
   其他的文件的写入方式都是一次性将一个内容写入到文件中的,
   如果文件太大了则会导致运行速度过慢,会严重影响程序的性能
   流式文件写入适合较大的文件写入,可以分多次将多个内容输出到文件中

相关代码:
//创建一个可写流(WriteStream)
var ws = fs.createWriteStream("hello3.txt");

//为流绑定一个open和close事件,来监听流是否打开和关闭
ws.once("open",function () {
    console.log("流打开了~~~");
});

ws.once("close",function () {
    console.log("流关闭了~~~");
});

//通过可写流向文件中输出内容
ws.write("O(∩_∩)O哈哈~");
ws.write("O(∩_∩)O~");

//关闭流
ws.end();
流式文件读取
   适合较大的文件读取

相关代码:
//创建一个可读流
var rs = fs.createReadStream("C:\\Users\\lilichao\\Desktop\\笔记.mp3");
//创建一个可写流
var ws = fs.createWriteStream("a.mp3");

//监听流的状态
rs.once("open",function () {
    console.log("可读流已经打开");
});

rs.once("close",function () {
    console.log("可读流已经关闭");
    //关闭可写流
    ws.end();
});

ws.once("open",function () {
    console.log("~~~~可写流已经打开");
});

ws.once("close",function () {
    console.log("~~~~可写流已经关闭");
});

//要读取一个可读流中的数据,必须要给该流绑定一个data事件
//绑定data事件后,流会自动读取数据,数据读取完毕以后,流会自动关闭
//读取到的数据会通过回调函数的参数的形式返回
rs.on("data",function (data) {
    //console.log(data.length);
    //将数据线写入到可写流中
    ws.write(data);

});


简单方法::
//创建一个可读流
var rs = fs.createReadStream("C:\\Users\\lilichao\\Desktop\\笔记.mp3");
//创建一个可写流
var ws = fs.createWriteStream("b.mp3");
//将可读流中的数据写入到可写流中
rs.pipe(ws);

5.其他读取文件

相关代码:
/*
 验证路径是否存在
     fs.existsSync(path)
 获取文件信息
     fs.stat(path, callback)
     fs.statSync(path)
 删除文件
     fs.unlink(path, callback)
     fs.unlinkSync(path)

 */

var result = fs.existsSync("ab.jpg");

//console.log(result);


fs.stat("a.jpg", function (err , stats) {
    if(!err){
        //stats 是一个对象,在该对象中保存了当前文件的状态信息
        /*
            通过该对象可以获取文件的状态
                stats.size 获取文件的大小
                stats.isFile() 是否是文件
                stats.isDirectory()是否是目录
         */
        //console.log(stats.isDirectory());
    }
});

//删除文件
//fs.unlinkSync("hello.txt");

/*
 列出文件
     fs.readdir(path[, options], callback)
     fs.readdirSync(path[, options])
 截断文件
     fs.truncate(path, len, callback)
     fs.truncateSync(path, len)
 建立目录
     fs.mkdir(path[, mode], callback)
     fs.mkdirSync(path[, mode])

 */

/*
fs.readdir(".",function (err , files) {
    if(!err){
        //files是一个保存了目录下文件(夹)名字的string数组
        console.log(files[0]);
    }
});*/

//截断文件 将文件截断成指定的大小,会丢失数据
//fs.truncateSync("hello2.txt",10);

//创建目录
//fs.mkdir("hello");

/*
删除目录
 fs.rmdir(path, callback)
 fs.rmdirSync(path)
重命名文件和目录
 fs.rename(oldPath, newPath, callback)
 fs.renameSync(oldPath, newPath)
 - 通过该方法也可以实现剪切的功能

监视文件更改写入
    fs.watchFile(filename[, options], listener)
        - 参数:
    filename 文件名
    options 配置对象
    listener 回调函数,当前文件发生变化时,该函数将会执行
        - curr 表示文件现在的状态
        - prev 表示文件修改前的状态
            - 这两个对象都是stats对象

*/

//fs.rmdir("hello");

/*fs.rename("b.mp3","C:\\Users\\lilichao\\Desktop\\b.mp3",function (err) {
    if(!err){
        console.log("修改成功");
    }
});*/

fs.watchFile("hello2.txt",{interval:1000},function (curr,prev) {
    console.log("当前文件的大小为: "+curr.size);
    console.log("修改前文件的大小为: "+prev.size);
});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值