在下面的这段代码中,我可以读取file1.txt
数据并将其写入file2.txt
,但是我想读取 file1 , file2 ,< em> file3 和 file4 ,然后将所有这些数据写入file5.txt
。怎么做?任何人都可以以我是初学者的身份编辑以下代码
var fs = require("fs");
fs.readFile('file1.txt',function(err, data){
fs.writeFile('file2.txt', data)
});
答案 0 :(得分:0)
执行此操作的一种方法是嵌套多个readFile,然后将writeFile嵌套在其中。像这样:
var fs = require("fs");
fs.readFile('file1.txt',function(err1, data1){
fs.readFile('file2.txt',function(err2, data2){
fs.readFile('file3.txt',function(err3, data3){
if(err1 || err2 || err3){
throw new Error();
}
let data = data1+data2+data3;
fs.writeFile('file4.txt', data);
});
});
});
实现此目标的另一种方法是使用Bluebird或类似的Promise库。
var fs = require('fs');
var Promise = require('bluebird');
var readFile = Promise.promisify(fs.readFile);
var writeFile = Promise.promisify(fs.writeFile);
var promiseArray = [readFile('file1.txt'), readFile('file2.txt'), readFile('file3.txt')];
Promise.all(promiseArray).then((dataArray)=>{
var data = '';
for(var i=0;i<dataArray.length;i++){
data += dataArray[i];
}
return writeFile('file4.txt', data);
});
我建议使用第二种方法。希望这会有所帮助:)
答案 1 :(得分:0)
我将为此选择Promise库。使对象thenable
可以提高代码的可读性,并防止代码在右侧增长。我的解决方案与其他解决方案几乎一样,只是我使用的是nodejs Buffer来串联其他文件的数据。
const fs = require('fs')
const file1 = 'a.txt'
const file2 = 'b.txt'
const allPromises = [file1, file2].map(eachFile => {
return new Promise((resolve, reject) => {
fs.readFile(eachFile, (err, data) => {
if(err) {
reject(err)
}else {
resolve(data)
}
})
})
})
Promise.all(allPromises).then(onfulfilled => {
const totalBufferContent = Buffer.concat(onfulfilled)
fs.writeFile('c.txt', totalBufferContent, (err) => {
if(err) throw err;
console.log('Done')
})
})
答案 2 :(得分:0)
我发现最简单的解决方案是安装concat软件包-它会为您完成所有工作:)请注意,writeFile
已不推荐使用writeFileSync
(代码[DEP0013])。
首先安装软件包
npm install concat
然后输入代码
const concat = require('concat'); //Or use ES6 Syntax
const fs = require('fs');
concat(['1.txt', '2.txt', '3.txt']).then(files_being_written =>
fs.writeFileSync('your-concated-file.txt', files_being_written))
// or this way
// concat(['1.txt', '2.txt', '3.txt'], 'your-concated-file.txt')
来源:
https://www.npmjs.com/package/concat https://github.com/nodejs/node/issues/14770