【Node.js】'readline' 逐行读取、写入文件内容

[]运用readline逐行读取的两种实现


效果图如下:

左边1.log 为源文件

右边1.readline.log为复制后的文件

下边为命令行输出



实现方式一:

[javascript] view plain copy
  1. var readline = require('readline');  
  2. var fs = require('fs');  
  3. var os = require('os');  
  4.   
  5. var fReadName = './1.log';  
  6. var fWriteName = './1.readline.log';  
  7. var fRead = fs.createReadStream(fReadName);  
  8. var fWrite = fs.createWriteStream(fWriteName);  
  9.   
  10.   
  11. var objReadline = readline.createInterface({  
  12.     input: fRead,  
  13. // 这是另一种复制方式,这样on('line')里就不必再调用fWrite.write(line),当只是纯粹复制文件时推荐使用  
  14. // 但文件末尾会多算一次index计数   sodino.com  
  15. //  output: fWrite,   
  16. //  terminal: true  
  17. });  
  18.   
  19.   
  20. var index = 1;  
  21. objReadline.on('line', (line)=>{  
  22.     var tmp = 'line' + index.toString() + ':' + line;  
  23.     fWrite.write(tmp + os.EOL); // 下一行  
  24.     console.log(index, line);  
  25.     index ++;  
  26. });  
  27.   
  28. objReadline.on('close', ()=>{  
  29.     console.log('readline close...');  
  30. });  


实现方式二:

[javascript] view plain copy
  1. var readline = require('readline');  
  2. var fs = require('fs');  
  3. var os = require('os');  
  4.   
  5. var fReadName = './1.log';  
  6. var fWriteName = './1.readline.log';  
  7. var fRead = fs.createReadStream(fReadName);  
  8. var fWrite = fs.createWriteStream(fWriteName);  
  9.   
  10. var enableWriteIndex = true;  
  11. fRead.on('end', ()=>{  
  12.     console.log('end');  
  13.     enableWriteIndex = false;  
  14. });  
  15.   
  16. var objReadline = readline.createInterface({  
  17.     input: fRead,  
  18.     output: fWrite,   
  19.     terminal: true  
  20. });  
  21.   
  22.   
  23. var index = 1;  
  24. fWrite.write('line' + index.toString() +':');  
  25. objReadline.on('line', (line)=>{  
  26.     console.log(index, line);  
  27.     if (enableWriteIndex) {  
  28.         // 由于readline::output是先写入后调用的on('line')事件,  
  29.         // 所以已经读取文件完毕时就不需要再写行号了... sodino.com  
  30.         index ++;  
  31.         var tmp = 'line' + index.toString() + ':';  
  32.         fWrite.write(tmp);        
  33.     }  
  34. });  
  35.   
  36.   
  37.   
  38. objReadline.on('close', ()=>{  
  39.     console.log('readline close...');  
  40. });  

原文地址:https://www.cnblogs.com/wxmdevelop/p/7543190.html