您的位置:首页 > Web前端 > Node.js

浅谈Node.js 访问文件系统的几种写入方式

2018-03-05 17:56 651 查看

在node.js中,与文件的交互式非常重要的。下面介绍几种常用的文件写入方式。

简单文件的写入

例子:

var fs = require('fs');
var config = {
maxFiles: 20,
maxConnections: 15,
rootPath:"/webroot"
};
var configTxt = JSON.stringify(config);
var options = {encoding:'utf8', flag:'w'};
console.log(configTxt);
fs.writeFile('config.txt', configTxt, options, function(err){
if(err){
console.log("Config Write Failed.");
} else{
console.log("Config Saved.");
}
})


执行结果:



打开config.txt。可以看到文件已经储存在txt里面了。



同步文件写入

例子:

var fs = require('fs');
var veggieTray = ['carrots', 'celery', 'olives'];
fd = fs.openSync('veggie.txt', 'w');
while (veggieTray.length){
veggie = veggieTray.pop() + "";
var bytes = fs.writeSync(fd, veggie, null, null);
console.log("Wrote %s %dbytes", veggie, bytes);
}
fs.closeSync(fd);


执行结果:

我们去看veggie.txt。里面保存了数据:



异步文件写入

例子:

var fs = require('fs');
var fruitBowl = ['apple','orange','banana','grapes'];
function writeFruit(fd){
if (fruitBowl.length){
var fruit = fruitBowl.pop() + "";
fs.write(fd, fruit, null, null, function(err, bytes){
if (err) {
console.log("File Write Failed.");
} else{
console.log("Wrote: %s %dbytes", fruit, bytes);
writeFruit(fd);
}
});
} else {
fs.close(fd);
}
}
fs.open('fruit.txt', 'w', function(err,fd){
writeFruit(fd);
})


执行结果:



打开fruit.txt。可以看到文件已经储存在txt里面了。



流式文件写入

例子:

var fs = require('fs');
var grains = ['wheat','rice','oats'];
var options = {
encoding: 'utf8', flag:'w'
};
var fileWriteStream = fs.createWriteStream("grains.txt", options);
fileWriteStream.on("close", function(){
console.log("File Closed.");
});
while (grains.length){
var data = grains.pop() + "";
fileWriteStream.write(data);
console.log("Wrote: %s", data);
}
fileWriteStream.end();


执行结果:



我们去看grains.txt。里面已经保存了数据:



总结:将数据写入一个文件的最简单的方法是简单文件写入。

同步文件写入能在文件写入的的同步方法涉及在返回执行正在运行的线程之前,将数据写入文件,提供了能够在相同的代码段写入的多个优点,但是如果该文件控制住其他的线程,它就可能是一个缺点。

异步写入文件是在事件队列中放置一个写入请求,然后将控制返回给调用代码。除非事件循环提取出写入请求,并且运行它,否则实际的写的操作不会发生。在用一个文件上执行多个异步的写入请求时,必须要小心。因为除非你在执行下一个写入之前必须等待第一个写入回调函数的完成,否则你不能保证他的执行顺序。一般情况下,做到这一点的最简单的方法是把写操作嵌套到来自上一个写操作的回调函数中(上面有代码,可以仔细看。)

流式写入文件主要是为了向一个文件中写入大量的数据,包括把一个文件作为一个Writable流打开。

目前笔者只了解这几种写入的方式,欢迎大家进行讨论

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: