Node.js同步文件与异步文件

ZCQ
日期:2021年1月29日

fs中的所有操作都有同步和异步两种形式

同步文件系统会阻塞程序的执行,也就是除非操作完毕,否则不会向下执行代码 如fs.openSync

异步文件系统不会阻塞程序的执行,而是在操作完成时,通过回调函数将结果返回 如fs.open

同步文件的写入:

1.打开文件

 fs.openSync(path,flags[,mode])

   --path:要打开文件的路径
     --flags:打开文件要做的操作类型
         r 只读的
         w 可写的
     --mode:设置文件的操作权限,一般不传
     返回值:
     --该方法会返回一个文件的描述符作为结果,我们可以通过该描述符来对文件进行各种操作
       
   var fs=require("fs")
   fs.openSync("hi.txt","w")

2.向文件中写入内容

 fs.writeSync(fd,string[,position[,encoding])
       --fd:文件的描述符
       --string:文件的内容
       --position:写入的起始位置
       --encoding:写入的编码,默认'utf-8'
   fs.writeSync(fs,"今晚的月色好美呀~~~");

3.保存并关闭

fs.closeSync(fd)
       --fd 要关闭的文件的描述符

完整代码:

    var fs=require("fs");
    var fd=fs.openSync("hi.txt","w");
    fs.writeSync(fd,"今晚的月色好美呀~~~");
    fs.closeSync(fd)

注:对文件的位置没有特殊要求,如上述的’hi.txt’,笔者是直接在桌面上创建的。

异步文件的写入
fs.open(path,flags,[,mode],callback)
异步方法不会有返回值,都是通过回调函数callback的参数返回的
回调函数的参数:
err:错误对象,如果没有则为null
fd:文件的描述符
–用来打开一个文件
1.打开文件
fs.open(“hi.txt”,“w”,function(err,fd){
if(!err){
console.log(fd);
}else{
console.log(err);
}
});

2.写入文件
fs.write(fd, buffer[, offset[, length[, position]]], callback)

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


    var fs=require("fs");
    //打开文件
    fs.open("hi.txt","w",function(err,fd){
        if(!err){
            console.log(fd);
            //写入文件
            fs.write(fd,"蓝蓝的天空白云飘~~",function(err){
                if(!err){
                    console.log("写入成功");
                }
            //关闭文件
            fs.close(fd,function(err){
                if(!err){
                    console.log("文件已关闭");
                }
            });
            })
        }else{
            console.log(err);
        }
    });

    console.log("这段代码在异步文件操作的下面,但是比异步文件操作先执行");

输出:


这段代码在异步文件操作的下面,但是比异步文件先执行
3
写入成功
文件已关闭

比较同步与异步:

1.同步代码的执行顺序比较符合人类认知,从上到下执行
而异步方式会先执行这段代码之后的部分,然后再执行异步代码中间的部分
2.同步文件书写比较简洁,异步文件操作书写比较复杂,可读性较差
但是同步文件简洁是因为没有考虑异常处理
异步文件操作考虑了异常处理
当出现异常时,异步文件操作部分会报错,而整个程序的其他部分可以正常执行
同步文件往往会导致整个程序无法正常运行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中南大学苹果实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值