互動(dòng)吧網(wǎng)站模板青島網(wǎng)絡(luò)推廣
“勤奮就是成功之母。”? —— 茅以升
目錄
- 逐行讀取文件四種方法:
- Node.js 逐行讀取文件的核心方法:
- 同步讀取(適用于小文件):
- 異步流式處理(推薦用于大文件):
- [使用 readline 模塊](https://blog.csdn.net/qq_53002037/article/details/145934201?spm=1001.2014.3001.5501)(原生API):
- 手動(dòng)實(shí)現(xiàn)流處理:
- 第三方庫(kù)(簡(jiǎn)化操作):
- 四種方法性能與場(chǎng)景對(duì)比:
逐行讀取文件四種方法:
- 用readline模塊、
- fs.readFileSync同步讀取并分割、
- 使用第三方庫(kù)如line-reader、
- 以及通過(guò)流(stream)手動(dòng)處理
Node.js 逐行讀取文件的核心方法:
Node.js 逐行讀取文件的核心方法可分為? 同步處理?和?異步流式處理?兩大類。
同步讀取(適用于小文件):
通過(guò) fs.readFileSync 一次性讀取全部?jī)?nèi)容后按換行符拆分,但會(huì)阻塞事件循環(huán)且內(nèi)存占用高?。
簡(jiǎn)單舉例:
const fs = require('fs');
const lines = fs.readFileSync('file.txt', 'utf8').split(/\r?\n/);
lines.forEach(line => console.log(line));
特點(diǎn):
- ?? 代碼簡(jiǎn)潔,適合快速處理小型文件
- ? 大文件可能導(dǎo)致內(nèi)存溢出?
異步流式處理(推薦用于大文件):
使用 readline 模塊(原生API):
使用 readline 模塊(原生API),通過(guò)流逐行讀取,內(nèi)存效率高且非阻塞?。
簡(jiǎn)單舉例:
const fs = require('fs');
const readline = require('readline');const rl = readline.createInterface({input: fs.createReadStream('file.txt'),crlfDelay: Infinity // 兼容不同系統(tǒng)的換行符
});rl.on('line', (line) => {console.log(line);
}).on('close', () => {console.log('讀取完成');
});
?特點(diǎn)?:
- ? 支持任意大小的文件
- ? 可與其他流(如HTTP請(qǐng)求)結(jié)合使用?
手動(dòng)實(shí)現(xiàn)流處理:
通過(guò)監(jiān)聽流的 data 事件逐字節(jié)解析換行符,靈活性高但代碼復(fù)雜度較高?。
典型場(chǎng)景?:
- 需要精確控制換行符邏輯(如處理混合換行符)
- 實(shí)現(xiàn)特定行數(shù)的批量讀取(如每次讀取100行后暫停處理)?
第三方庫(kù)(簡(jiǎn)化操作):
如 line-reader 提供更簡(jiǎn)潔的API:
簡(jiǎn)單舉例:
const lineReader = require('line-reader');
lineReader.eachLine('file.txt', (line, last) => {console.log(line);if (last) console.log('處理完畢');
});
特點(diǎn)?:
- ? API 簡(jiǎn)潔易用
- ? 增加外部依賴?
四種方法性能與場(chǎng)景對(duì)比:
方法 | 內(nèi)存占用 | 執(zhí)行效率 | 適用場(chǎng)景 |
---|---|---|---|
readFileSync | 高 | 快 | 小型文件(<100MB) |
readline | 低 | 中 | 大型文件/需要流式處理 |
手動(dòng)流處理 | 低 | 高 | 特殊換行符/分批處理需求 |
第三方庫(kù) | 中 | 中 | 快速開發(fā)/非性能敏感場(chǎng)景? |