【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. });  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM