Nodejs-逐行读取文件【简易版】
“勤奋就是成功之母。” —— 茅以升
目录
- 逐行读取文件四种方法:
- Node.js 逐行读取文件的核心方法:
- 同步读取(适用于小文件):
- 异步流式处理(推荐用于大文件):
- [使用 readline 模块](https://blog.csdn.net/qq_53002037/article/details/145934201?spm=1001.2014.3001.5501)(原生API):
- 手动实现流处理:
- 第三方库(简化操作):
- 四种方法性能与场景对比:
逐行读取文件四种方法:
- 用readline模块、
- fs.readFileSync同步读取并分割、
- 使用第三方库如line-reader、
- 以及通过流(stream)手动处理
Node.js 逐行读取文件的核心方法:
Node.js 逐行读取文件的核心方法可分为 同步处理和异步流式处理两大类。
同步读取(适用于小文件):
通过 fs.readFileSync 一次性读取全部内容后按换行符拆分,但会阻塞事件循环且内存占用高。
简单举例:
const fs = require('fs');
const lines = fs.readFileSync('file.txt', 'utf8').split(/\r?\n/);
lines.forEach(line => console.log(line));
特点:
- ✅ 代码简洁,适合快速处理小型文件
- ❌ 大文件可能导致内存溢出
异步流式处理(推荐用于大文件):
使用 readline 模块(原生API):
使用 readline 模块(原生API),通过流逐行读取,内存效率高且非阻塞。
简单举例:
const fs = require('fs');
const readline = require('readline');
const rl = readline.createInterface({
input: fs.createReadStream('file.txt'),
crlfDelay: Infinity // 兼容不同系统的换行符
});
rl.on('line', (line) => {
console.log(line);
}).on('close', () => {
console.log('读取完成');
});
特点:
- ✅ 支持任意大小的文件
- ✅ 可与其他流(如HTTP请求)结合使用
手动实现流处理:
通过监听流的 data 事件逐字节解析换行符,灵活性高但代码复杂度较高。
典型场景:
- 需要精确控制换行符逻辑(如处理混合换行符)
- 实现特定行数的批量读取(如每次读取100行后暂停处理)
第三方库(简化操作):
如 line-reader 提供更简洁的API:
简单举例:
const lineReader = require('line-reader');
lineReader.eachLine('file.txt', (line, last) => {
console.log(line);
if (last) console.log('处理完毕');
});
特点:
- ✅ API 简洁易用
- ❌ 增加外部依赖
四种方法性能与场景对比:
方法 | 内存占用 | 执行效率 | 适用场景 |
---|---|---|---|
readFileSync | 高 | 快 | 小型文件(<100MB) |
readline | 低 | 中 | 大型文件/需要流式处理 |
手动流处理 | 低 | 高 | 特殊换行符/分批处理需求 |
第三方库 | 中 | 中 | 快速开发/非性能敏感场景 |