【Node.js】'readline' 逐行讀取、寫入文件內容

運用readline逐行讀取的兩種實現


效果圖如下:

左邊1.log 爲源文件

右邊1.readline.log爲複製後的文件

下邊爲命令行輸出



實現方式一:

var readline = require('readline');
var fs = require('fs');
var os = require('os');

var fReadName = './1.log';
var fWriteName = './1.readline.log';
var fRead = fs.createReadStream(fReadName);
var fWrite = fs.createWriteStream(fWriteName);


var objReadline = readline.createInterface({
	input: fRead,
// 這是另一種複製方式,這樣on('line')裏就不必再調用fWrite.write(line),當只是純粹複製文件時推薦使用
// 但文件末尾會多算一次index計數   sodino.com
//  output: fWrite, 
//  terminal: true
});


var index = 1;
objReadline.on('line', (line)=>{
	var tmp = 'line' + index.toString() + ':' + line;
	fWrite.write(tmp + os.EOL); // 下一行
	console.log(index, line);
	index ++;
});

objReadline.on('close', ()=>{
	console.log('readline close...');
});


實現方式二:

var readline = require('readline');
var fs = require('fs');
var os = require('os');

var fReadName = './1.log';
var fWriteName = './1.readline.log';
var fRead = fs.createReadStream(fReadName);
var fWrite = fs.createWriteStream(fWriteName);

var enableWriteIndex = true;
fRead.on('end', ()=>{
	console.log('end');
	enableWriteIndex = false;
});

var objReadline = readline.createInterface({
	input: fRead,
  	output: fWrite, 
	terminal: true
});


var index = 1;
fWrite.write('line' + index.toString() +':');
objReadline.on('line', (line)=>{
	console.log(index, line);
	if (enableWriteIndex) {
		// 由於readline::output是先寫入後調用的on('line')事件,
		// 所以已經讀取文件完畢時就不需要再寫行號了... sodino.com
		index ++;
		var tmp = 'line' + index.toString() + ':';
		fWrite.write(tmp);		
	}
});



objReadline.on('close', ()=>{
	console.log('readline close...');
});



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章