一、简单文件写入
异步: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('流式文件写入~~~');
三、其他知识
- Node fs文件系统模块总结
- Node fs同步、异步写入文件(一)
- Node fs同步、异步、简单、流式文件读取(三)
- Node fs获取文件信息、其他操作(四)
- Node 简单、流式文件的读取写入【案例】