无法读取文件并将相同的内容写入nodejs中的另一个文件

时间:2018-09-13 05:24:53

标签: node.js file-io

我正在尝试打开并读取文件名spam0,我想获取其内容并将其写入另一个名为input.txt的文件中,但出现错误。

这是我到目前为止尝试过的:

file0 = fs.open("./spam0.txt", 'r', function(err, data) // opening spam0 
{
    if (err) {
        console.log("error");
    } else {
        //write spam0 data tp input.txt
        file = fs.writeFile('input.txt',  data, {flag:"w+",encoding:"utf8"} ,function(err, data)
        {
            if (err) {
                throw err;
            }
        });
    }
});

我得到的错误是:

fs.js:75
throw new TypeError('"options" must be a string or an object, got ' +
^
TypeError: "options" must be a string or an object, got number instead.
at getOptions (fs.js:75:11)
at Object.fs.writeFile (fs.js:1269:13)
at C:\Users\akash\Desktop\riidl\node.trail.js:12:14
at FSReqWrap.oncomplete (fs.js:135:15)

1 个答案:

答案 0 :(得分:1)

换句话说,您要将内容从一个文件复制到另一个文件,对吗? 从原始文件创建读取流并将其通过管道传输到目标文件流会容易得多。

const fs = require('fs');
const origin = fs.createReadStream('./spam0.txt', {flags: 'r'});
const destination = fs.createWriteStream('input.txt', {flags: 'w+'});    
origin.pipe(destination);

当然,如果要进行一些转换,可以使用Transform streams(请参阅tutorial by Jeff Barczewski)。

const fs = require('fs');
const stream = require('stream');
const origin = fs.createReadStream('./spam0.txt', {
    flags: 'r',
    // read data as a string not as a buffer
    encoding: 'utf8'
});
const transform = new stream.Transform({
    // accept data as a strings
    writableObjectMode: true,
    transform: function removeNewLines(chunk, encoding, callback){
        callback(null, chunk.replace(/\n/g, ''));
    }
});
const destination = fs.createWriteStream('input.txt', {
    flags: 'w+',
    // write data as a strings, this is default value
    encoding: 'utf8'
});

origin.pipe(transform).pipe(destination);