【问题标题】:How to read and write multiple text file in node js如何在节点js中读写多个文本文件
【发布时间】:2018-10-11 13:44:29
【问题描述】:

在下面的代码中,我可以读取file1.txt 数据并将其写入file2.txt,但我想读取file1file2file3 和 file4 然后将所有这些数据写入file5.txt。怎么做?我是初学者,任何人都可以编辑以下代码

 var fs = require("fs");

    fs.readFile('file1.txt',function(err, data){
        fs.writeFile('file2.txt', data)
    });

【问题讨论】:

标签: node.js


【解决方案1】:

执行此操作的一种方法是嵌套多个 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 或类似的承诺库。

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、文件 2、文件 3
【解决方案2】:

我会为此选择 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')
    })
})

【讨论】:

    【解决方案3】:

    我找到的最简单的解决方案是安装包 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 2020-11-03
      • 1970-01-01
      • 2018-10-25
      • 2018-11-12
      • 1970-01-01
      相关资源
      最近更新 更多