在 NodeJS 中,如何在不手动添加换行符的情况下将行打印到文件中?
In NodeJS, how do you print lines to a file without manually adding the new line character?
我正在尝试弄清楚如何简单地将代表一行的字符串写入文件,我调用的任何函数都会自动附加一个换行符。
我已经尝试为此使用默认的 NodeJS 文件系统库,但如果不手动将 '\n'
附加到字符串,我无法以任何方式让它工作。
这是我试过的代码:
const fs = require('fs');
const writer = fs.createWriteStream('test.out.txt', { flags: 'w' })
writer.write('line 1')
writer.write('line 2');
writer.write('line 3');
writer.end('end');
但是,输出文件 test.out.txt
包含没有换行符的以下行:
line 1line 2line 3end
我希望它看起来像这样:
line 1
line 2
line 3
end
请注意,我不是要记录消息,也不是要重定向标准输出。
有没有什么办法可以这样打印并自动添加换行符?
手动附加 \n
还不错。
你可以写一个包装函数来避免到处都放 + '\n'
:
const os = require('os');
let writeln = function (writeStream, str) {
writeStream.write(str + os.EOL);
}
writeln(writer, 'line 1');
writeln(writer, 'line 2');
writeln(writer, 'line 3');
writeln(writer, 'end');
根据我粗略查看 fs.WriteStream
文档可以看出,没有原生 writeln
函数或任何类似的东西。
如评论中所述,您可以编写一个函数将文本添加为一行
const writeLine = (writerObject, text) => {
writerObject.write(`${text}\n`)
}
writeLine(writer, 'line 1')
writeLine(writer, 'line 2')
writeLine(writer, 'line 3')
或者您也可以使用 clojure 创建一个包装器对象来保留 'writer' 而不是每次都传递它
const customWriter = writerObject => {
return text => writerObject.write(`${text}\n`)
}
const yourWriterWithBreakLine = customWriter(writer)
yourWriterWithBreakLine('line 1')
yourWriterWithBreakLine('line 2')
yourWriterWithBreakLine('line 3')
我正在尝试弄清楚如何简单地将代表一行的字符串写入文件,我调用的任何函数都会自动附加一个换行符。
我已经尝试为此使用默认的 NodeJS 文件系统库,但如果不手动将 '\n'
附加到字符串,我无法以任何方式让它工作。
这是我试过的代码:
const fs = require('fs');
const writer = fs.createWriteStream('test.out.txt', { flags: 'w' })
writer.write('line 1')
writer.write('line 2');
writer.write('line 3');
writer.end('end');
但是,输出文件 test.out.txt
包含没有换行符的以下行:
line 1line 2line 3end
我希望它看起来像这样:
line 1
line 2
line 3
end
请注意,我不是要记录消息,也不是要重定向标准输出。
有没有什么办法可以这样打印并自动添加换行符?
手动附加 \n
还不错。
你可以写一个包装函数来避免到处都放 + '\n'
:
const os = require('os');
let writeln = function (writeStream, str) {
writeStream.write(str + os.EOL);
}
writeln(writer, 'line 1');
writeln(writer, 'line 2');
writeln(writer, 'line 3');
writeln(writer, 'end');
根据我粗略查看 fs.WriteStream
文档可以看出,没有原生 writeln
函数或任何类似的东西。
如评论中所述,您可以编写一个函数将文本添加为一行
const writeLine = (writerObject, text) => {
writerObject.write(`${text}\n`)
}
writeLine(writer, 'line 1')
writeLine(writer, 'line 2')
writeLine(writer, 'line 3')
或者您也可以使用 clojure 创建一个包装器对象来保留 'writer' 而不是每次都传递它
const customWriter = writerObject => {
return text => writerObject.write(`${text}\n`)
}
const yourWriterWithBreakLine = customWriter(writer)
yourWriterWithBreakLine('line 1')
yourWriterWithBreakLine('line 2')
yourWriterWithBreakLine('line 3')