Node.js异步、缓存区、文件系统(未完)

一、回调函数

1)什么是回调函数?

回调函数也称为回调(callback),其实就是一个普通函数。将该函数作为另外一个函数的参数传入,由另外一个函数根据条件调用。

2)回调函数的实现机制

a. 定义一个普通函数(作为回调函数)

b. 将该函数作为参数传入另外一个函数中(调用者)

c. 调用者函数在具体的时机或条件达到时,调用该函数(俗话说:回过头再调用)

3)回调函数的作用

如果我们需要在某个任务完成后,执行一段代码,可以使用回调函数

function A(){
    //...
}
function B(a,A){
    //...
}
//则A为回调函数,B为调用者

二、异步与同步

1)什么是同步与异步?

同步:前一个任务完成后,后一个任务才能继续执行(会造成阻塞)

异步:将比较复杂的任务制作成异步模式(回调函数),这时后一句代码不需要等前一句代码执行完毕也可以执行(不会造成阻塞)

2)异步的实现

a. 回调函数

异步一定有回调函数,但回调函数不一定都是异步,一些同步情况也会用到回调函数。

b. 事件

触发事件后执行一个函数,就是异步

如:  事件源.on(事件类型,回调函数);       (这和前端中的监听事件类似)

c. promise承诺对象(难...)

实现异步的消息传递

三、Buffer缓存区

1)什么是缓存区?

缓存区就是在内存中开辟存储空间,用于存储数据

2)缓存区操作

a. 创建新的缓存区

var buf = new Buffer(10);
//这里创建了一个能存储10字节数据的缓存区

var buf = new Buffer([97,98]);
//创建指定字节码的缓存区,这里存储了字母'a'和'b'

var buf = new Buffer("你好!");
//自动创建该字符串大小的缓存区,并存储该字符串

b. 读取缓存区

buf.toString();
//将字节码转换成看得懂的字符串

c. 写缓存区

buf.write('字符串');
//能写数字或字符串,但不能写入数组

d. 复制缓存区

buf1.copy(buf2);
//将buf1复制给buf2

四、文件和目录基本操作(直接操作)

1)读取文件内容

a. 异步模式读取

var fs = require('fs');
//首先引入文件模块

fs.writeFile('./file.txt',function(err,date){
    if(err){
        throw err;//抛出错误
        //err为错误对象,如果有错则有值(可以抛出错误),否则为null
    }else{
        console.log(date);
        //date为获取到的数据(字符串)
    }
});

b. 同步模式读取(只要在异步方法名后加 Sync 就是同步版本)

var fs = require('fs');

var date = fs.writeFileSync('./file.txt');

console.log(date);

//此时若读取文件出错,系统则会自动报错,并停止执行下一步
//而异步模式若读取文件出错,则不会自动报错,需要手动抛出错误

2)读取文件信息

var fs = require('fs');

fs.stat('文件路径',function(err,info){
    //info对象就是文件的信息
    //    .size    文件大小
    //    .ctime    文件创建时间
    //    .mtime    文件修改时间
    //    .atime    文件访问时间
    //    .birthtime    文件的创建时间
    //*注:这里的时间都采用格林尼治时间,我们东八区要加8小时

    //info对象操作方法
    //    .isFile()    判断是否为文件,如果是则返回true,否则返回false
    //    .isDirectory()    判断是否为一个目录,如果是则返回true,否则返回false

});

3)写入文件(新增、修改)

var fs = require('fs');

fs.writeFile('文件路径',数据,function(err){
    //如果文件存在则修改
    //如果文件不存在则新增
});

4)删除文件

var fs = require('fs');

fs.unlink('文件路径',function(err){
    //...
});

5)新增目录

var fs = require('fs');

fs.mkdir('目录路径',function(err){
    //...
});

6)读取目录中的文件列表

var fs = require('fs');

fs.readdir("./hello",function(err,list){
    if(err){
        throw err;
    }else{
        //list为读取到的当前目录下所有文件及子文件夹列表,是一个数组
        list.forEach(function(v,i){
            console.log(v);
        });
        console.log("读取目录成功!");
    }
});

7)删除空目录

var fs = require('fs');

fs.rmdir('目录路径',function(err){
    //...
});

//*注:这里只能删除空目录,非空目录不能删除

8)其它操作

如:修改文件或目录名(fs.rename())详情可以参考官方文档

五、文件流式读写(※)

未完待续...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值