项目结构如下
具体代码如下:
//copyFileByLine.js
var fs = require("fs");
var os = require("os");
var readLine = require("readline");
/**
* 逐行复制文件
*
* @param ip Input file path
* @param op Output file path
*/
function copyFileByLine(ip, op) {
fs.access(op, function (err) {
if (err) {
fs.appendFile(op, "", function () {
var readObj = readLine.createInterface({
input: fs.createReadStream(ip)
});
var idx = 0;
var fWrite = fs.createWriteStream(op);
readObj.on('line', function (line) {
var temp = "line_" + idx++ + ": " + line;
fWrite.write(temp + os.EOL);//新建一行(换行)
console.log(idx, line);
});
readObj.on('end', function () {
console.log('copy file end!');
});
readObj.on('close', function () {
console.log('copy file closed!');
});
});
}
});
}
copyFileByLine('ObserverMode.js', 'ObserverMode-copy.js');
如果只是纯粹复制文件,推荐使用如下方式:
var fs = require("fs");
var readLine = require("readline");
/**
* 逐行复制文件
*
* @param ip Input file path
* @param op Output file path
*/
function copyFileByLine(ip, op) {
fs.access(op, function (err) {
if (err) {
fs.appendFile(op, "", function () {
var fWrite = fs.createWriteStream(op);
var readObj = readLine.createInterface({
input: fs.createReadStream(ip),
//on('line')里就不必再调用fWrite.write(line)
output: fWrite,
terminal: true
});
var idx = 0;
fWrite.write('line_' + idx++ +': ');
readObj.on('line', function (line) {
var temp = "line_" + idx++ + ": " + line;
fWrite.write(temp);
console.log(idx, line);
});
readObj.on('end', function () {
console.log('copy file end!');
});
readObj.on('close', function () {
console.log('copy file closed!');
});
});
}
});
}
copyFileByLine('ObserverMode.js', 'ObserverMode-copy.js');
目前,以上两种方式实现的效果是一样的。