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.同步文件书写比较简洁,异步文件操作书写比较复杂,可读性较差
但是同步文件简洁是因为没有考虑异常处理
异步文件操作考虑了异常处理
当出现异常时,异步文件操作部分会报错,而整个程序的其他部分可以正常执行
同步文件往往会导致整个程序无法正常运行