Node.js note2(Node 文件系统---fs模块)

Node文件系统—fs模块

在这里插入图片描述

3.1、readdirSync() 同步读取目录

同步调用会阻塞代码的执行,直到当前程序执行完成,才会往下执行。

语法fs.readdirSync(path) ; path(必选项),表示要读取的路径。
在这里插入图片描述
如果同步代码遇到了错误,后面的代码是不会继续进行的。因而我们想到一种办法,不仅能在关键位置捕获错误信息,同时不妨碍程序的正常执行。
在这里插入图片描述
在这里插入图片描述
上面出现的情况是程序同步执行出现了错误,try catch 可以帮我们规避错误带来的不好影响,而不会使程序出错中断,以便我们更好的修改代码。

不过在异步操作中,遵循错误优先原则:
在这里插入图片描述
这里结果是打印 “读取错了”,因为./demo是个文件夹,应该用readdir()方法。

3.2、readdir() 异步读取目录

异步则不会阻塞代码的执行。

异步调用会将读取任务下达到任务队列,直到任务执行完成才会回调。

语法fs.readdir(path,options,callback(err,files))

  • path(必选),表示要读取的路径。
  • options(可选)参数。
  • callback 是回调函数,第一个err错误信息,data成功内容

注意:在node的异步操作当中,有错误的回调优先原则。
在这里插入图片描述

3.3、mkdir() 创建目录
  1. mkdirSync() 同步创建目录
  2. mkdir() 异步创建目录

语法fs.mkdir(path,[mode],[callback(err)])注意不能创建一个已存在的文件夹。

  • path(必选),表示创建的目录。
  • mode(可选),表示创建模式。
  • callback 是回调函数,err错误信息

在这里插入图片描述

3.4、rename() 修改名字

语法fs.rename(oldpathname,newname,callback(err))

  • oldpathname(必选),修改的文件路径。
  • newname(必选)新名字。
  • callback 是回调函数,err错误信息

在这里插入图片描述

3.5、rmdir() 删除目录

注意:只能删除空文件夹。

var fs = require("fs");
fs.rmdir('./test', function(err) {
	if (err) { 
		console.error(err);
	} else{
		console.log("文件删除成功!"); 
	}
});    
3.6、writeFile() 异步写入

语法fs.writeFile(filename, data, [options], callback)

  • filename 文件名。
  • data 要往文件里写的内容,可以是字符串。
  • options 可选参数 encoding 编码,默认是utf-8。
  • callback 回调方法
 * 往文件里异步写数据,写入的内容可以是字符串,也可以是二进制数据。
 * 如果文件不存在,则创建;如果文件已存在,那么内容会被覆盖
 * @param {String} filename 文件名
 * @param {String|Buffer} data 要往文件里写的内容,可以是字符串,也可以是二进制数据。当为二进制数据时候,options.encoding 会被忽略
 * @param {Object} [options]
 * @param {String} options.encoding 编码,默认是utf8
 * @param {Number} options.mode=438 模式
 * @param {String} options.flag=w 写文件的模式
 * @param {Function} callback 回调方法

node基础-文件系统-文件写操作

3.7、readFile() 异步读取

语法fs.readFile("filename","encoding",[callback(err,data)])

  • filename(必选),表示要读取的文件名。
  • encoding(可选),表示文件的字符编码。
  • callback 是回调函数,用于接收文件的内容。err错误信息,data请求内容。
3.8、unlink() 异步删除
var fs = require("fs");
console.log("准备删除文件!");
fs.unlink('input.txt', function(err) {
	if (err) { 
		console.error(err);
		console.error(“删除失败”);
	} 
	console.log("文件删除成功!"); 
});    
3.9、扩展知识—回调地狱

什么是回调函数?
是必须得依赖另一个函数执行调用,它是异步执行的,也就是需要时间等待。典型的例子就是Ajax应用。

什么是回调地狱?
函数作为参数层层嵌套。

在node, 由于非阻塞I/O的特性,node中经常会产生回调地狱,而且回调地狱产生之后会导致代码可读性非常差。

3.10、扩展知识—promise对象

解决回调地狱的方式:promise asys/awiat 蓝鸟插件…

蓝鸟插件,是以前用的,了解一下就好;现在是promise asys/await的天下。

Promise对象简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作);Promise对象,可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,使得控制异步操作更加容易。
在这里插入图片描述
简答:什么是异步?

异步操作多了,容易造成回调地狱这个问题。回调地狱简单来讲,是回调函数层层嵌套。

在node里面,异步特别多。因为在node里面,讲究的是单线程,非阻塞时IO,基本上任何操作都是异步来执行。既然是异步,就会有很多的回调函数,就容易造成回调地狱。

那什么是异步?
首先异步操作时,在node里面使用的特别多。因为node里讲究单线程、非阻塞IO、事件驱动,所以有大量的异步回调,那么异步回调层层嵌套之后就容易造成回调地狱,导致当前代码可读性变得非常差。所以在我的项目中,一旦出现了异步操作,我会使用promise来解决异步。promise中有resolve和reject,分别是当成功、失败时执行相关的操作。当然,同步情况也会出现,不过在使用同步进行操作时我会带上try catch来预先判别下错误,防止当前程序崩溃。

3.11、扩展知识—promise异步操作封装

例子:封装一个异步删除。
在这里插入图片描述

当然也可以将这个异步删除操作单独封装到一个文件里面,暴露出来,在别的文件里面导入使用。
在这里插入图片描述
可以直接module.exports=del导出,也可以用对象的形式暴露:

module.exports={
	del  //del:del键名、键值一样,简写版
}

总结

简单讲述了node问价系统fs模块的一些方法:有

>>常用的:
mkdirSync() 同步创建目录
mkdir() 异步创建目录
readdirSync() 同步读取目录
readdir() 异步读取目录
readFileSync() 同步读取文件
readFile() 异步读取文件
rename() 修改名字
rmdir() 异步删除目录
unlink() 异步删除文件
writeFile() 异步写入

>>另外没有介绍到的,大家有兴趣的可以看下:
fs.stat 检测是文件还是目录(目录 文件是否存在) 
fs.appendFile 写入追加文件 
fs.existsSync('test/test')判断文件夹是否存
//fs.existsSync存在的合理性在于,在用fs.writeFile的时候,需要先判断文件夹是否存在,
//因为fs.writeFile方法必须在存在的文件夹之下才能创建并写入文件成功

官方:Node.js v14.7.0 文档 fs文件系统

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值