文件系统
简单来说就是通过 Node 来操作系统中的文件
使用文件系统需要先引入 fs 核心模块
使用时涉及到同步调用和异步调用
fs 模块中所有的操作都有两种形式可供选择,即为同步和异步
同步文件系统会阻塞程序的执行【除非操作完毕,否则不会向下执行代码】
异步文件系统不会阻塞程序的执行【在操作完成时,通过回调函数将结果返回】
———————————————————————————————————————————
文件的操作分为 文件的写入 和 文件的读取
同步调用下:
文件的写入
——操作步骤
打开文件
但是发现没有返回任何东西,但是实际上是有返回值的
新建变量接收它返回的结果
该方法会返回一个文件的描述符作为结果(通常为数字),通过该描述符对文件进行操作
出现描述符后即打开成功,可以看到在文件夹下多出来了个 hello.txt
向文件中写入内容
打开 hello.txt,可以看到成功写入
string 后还有一个参数 position,它所写入的数字代表空几个字符开始书写
【position 参数可选可不选】
hh.writeSync(3,"我是写入的内容......",20);
保存并关闭文件
服务器是循环且不会关闭的,如果不关闭文件,文件次数庞大后会影响性能
其实拢共说下来就四行代码
——————————————————————————————————————————
异步调用下:
文件的写入
——操作步骤
打开文件
接下来接收返回值
发现返回值为空值 ,想想也是,这种写法就和同步一样了
所以结合
“异步文件系统不会阻塞程序的执行【在操作完成时,通过回调函数将结果返回】”
这句话
得出结论:异步方法不会有返回值,其结果都是通过回调函数返回的
PS: 如果不为 callback参数 传函数则报错
向文件中写入内容
【注释:!err 表示如果该代码段没有错,则正常往里写】
可以看到正常写入了
关闭并保存文件
异步调用和同步调用的区别在于:
同步命令比异步多 Sync,异步命令比同步多参数 callback
异步是一把双刃剑,虽然它的操作步骤相对繁琐,但它不会阻塞程序的执行,如果其中的某一步出错也不会影响其他程序的执行
_____________________________________________________________________________
其实上面两种方法用得并不多..........
不过看明白上面就能很好的明白同步和异步的区别
接下来说说常用的
简单文件写入
当然它也分同步和异步
效果
向其他目录下写
.writeFile("C:/Users/HP/hello异步.txt","我是异步下的writeFile",(err)=>{});
PS:还有 options参数 可设置,方法:{参数:“值”}
options 一般不写,.writeFlie方法已经为我们设置好默认参数了
但是其中向文件中写入内容的方法为覆盖式写法,如果我们想往里追加内容可以使用
.writeFile/.writeFileSync("文件名","文件内容吧",{flag:"a"});
flag具体参数参考下图
——————————————————————————————————————————
无论是同步异步还是简单文件都存在一个问题,都不适合大文件写入
【它们都是一次性的将一个内容全部写到文件里,这样就导致在写之前就要将所有要写的都准备好,然后一次性写入,如果文件内容过多的话就会占用内存越多导致对性能损耗很大(性能较差,文件溢出) 】
解决这个问题只需要写入的时候不要一次性写入,,细水长流式慢慢往里加内容就行
简称:流式写入
创建一个可写流
可以为 流 绑定监听事件