使用node.js
當中的可使用內置的readline
模塊來確保每次只讀取文本當中一行的內容。使用時,與之相關的內置模塊還有fs
模塊與path
模塊。node
const fs = require('fs'); const path = require('path'); const readline = require('readline');
var rl = readline.createInterface({ input:fs.createReadStream(filename) });
其中filename
表明該文件的絕對物理路徑,可以使用path.join()
與__dirname
拼接完成。npm
rl.on('line',(line)=>{ });
該文件流讀取器每次讀取文本當中一行的內容即觸發執行一次該回調函數。函數
readline
模塊在控制檯中的簡單應用先用const readline = require('readline');
來引包,使用const rl = readline.createInterface(process.stdin,process.stdout);
來建立輸入和輸出流的界面,以後使用rl.on('line',(line)=>{});
,該事件在用戶在控制檯當中輸入一行數據,並敲回車以後觸發執行其回調函數,回調函數當中的line
即爲用戶輸入的這一行數據,爲字符串類型,因爲該數據當中可能包含回車換行符,咱們一般的處理爲line.trim();
ui
iconv-lite
在readline
模塊當中的使用使用npm進行下載並引包編碼
const iconvLite = require('iconv-lite');
從 input:fs.createReadStream(filename)
流的源頭就進行編碼轉換。spa
var rl = readline.createInterface({ input:fs.createReadStream(filename).pipe(iconvLite.decodeStream('gbk')) });
其餘的代碼與以前的同樣。code
以前咱們在涉及文件的讀寫操做時都用的是fs.readFile()
與fs.writeFile()
這兩個方法。這兩種方法都是對文本內容進行一次性讀取,形成在文件操做的過程當中佔用較大的內存空間,容易致使機器卡頓。因此咱們在對大文件進行拷貝操做時,一般使用文件流的方式,最常使用.pipe()
方法。blog
fs
模塊與path
模塊)const fs = require('fs'); const path = require('path');
var reader = fs.createReadStream(readFilename); var writer = fs.createWriteStream(writeFilename);
其中readFilename
爲被讀取文件的絕對物理路徑,writeFilename
爲被寫入文件的絕對物理路徑。事件
.pipe()
方法進行鏈接reader.pipe(writer); reader.on('end',()=>{ console.log('文件拷貝完成!'); });
該方法至關於從讀取流當中接一根管道到寫入流當中,數據源源不斷地以流的形式進行傳遞,該方法內部會自動幫咱們控制緩衝區的大小,當數據傳遞完畢時,會自動退出當前程序。end事件在數據傳遞完畢以後觸發該回調函數。圖片