Node fs简单、流式写入文件(二)

在这里插入图片描述

一、简单文件写入

异步:fs.writeFile(file,data[,option],callback)
同步:fs.writeFileSync(file,data[,options])

  • file:要操作的文件的路径
  • data:要被写入的内容,可以是 String 或 Buffer
  • options:包含属性(encoding、mode、 flag)

例:{flag : “r”},表示文件打开状态为只读,详细打开状态介绍,如下:

在这里插入图片描述

  • callback:当写入完成以后执行的函数
简单文件导入
var fs = require('fs');
fs.writeFile('hello3.txt','这是writeFile写入的文件',{flag:'a'},function (err) {
    if (!err){
        console.log('写入成功~~~');
    }
})

二、流式文件写入

同步文件写入、异步文件写入、简单文件写入,都不适合大文件的写入,性能较差,容易导致内存溢出。而我们流式文件写入的方式类似于异步,是大文件写入的最佳选择。

  • 往一个文件中写入大量数据时,最好的方法之一是使用流。
  • 若要将数据异步传送到文件,首需要使用以下语法创建一个 Writable 对象:
fs.createWriteStream(path[, options]) 
// path 文件路径 
// options {encoding:"",mode:"",flag:""}  // 一般不写
  • 我们可以通过open和close事件,来监听流的打开与关闭。

  • 一旦你打开了 Writable 文件流,就可以使用 write() 方法来写入它,写入完成后,在调用 end() 方法来关闭流。

// 流式文件写入
var fs = require('fs');
var ws = fs.createWriteStream('hello4.txt');
ws.on('open',function () {
    console.log('流打开了~~~');
});
ws.on('close',function () {
    console.log('流关闭了~~~');
})
ws.write('流式文件写入~~~');
ws.end();

我们可以发现,在以上案例中,我们监听流的打开与关闭,为其绑定了一个 on 的事件,这种方式它会持续进行触发,那么是耗用我们内存的。因为我们在开启、关闭流的时候,数据也就都传递过去了,没有必要再使用 on 的方式,持续进行监听了。那么有什么好的方式呢?很简单,我们可以使用 once,顾名思义,就是只触发一次。

我们使用on(事件字符串,回调方式),这个方法可以为我们的对象,绑定一个对象,且会持续触发。而我们的once(事件字符串,回调方式),则可以为我们的对象,绑定一个一次性的事件,该事件会在触发一次以后,自动失效。

对应以上的案例,我们在结束 (end) 的时候,先进行了 write(),也就是写入了数据,然后在 end() 结束了它。其实没必要这么麻烦,我们可以在结束 (end) 的时候,直接给其写入数据。

修改代码,如下:

ws.once('open',function () {
     console.log('流打开了~~~');
 });
ws.once('close',function () {
     console.log('流关闭了~~~');
 })
ws.end('流式文件写入~~~');

三、其他知识

发布了161 篇原创文章 · 获赞 71 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_44034384/article/details/99984733