node.js當中的readline模塊與文件流操做

1、readline模塊

使用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-litereadline模塊當中的使用

使用npm進行下載並引包編碼

const iconvLite = require('iconv-lite');

input:fs.createReadStream(filename) 流的源頭就進行編碼轉換。spa

var rl = readline.createInterface({
    input:fs.createReadStream(filename).pipe(iconvLite.decodeStream('gbk'))
});

其餘的代碼與以前的同樣。code

2、文件流操做

以前咱們在涉及文件的讀寫操做時都用的是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事件在數據傳遞完畢以後觸發該回調函數。圖片

相關文章
相關標籤/搜索