当前位置: 首页 > news >正文

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大型文件/需要流式处理
手动流处理特殊换行符/分批处理需求
第三方库快速开发/非性能敏感场景‌
http://www.lryc.cn/news/544428.html

相关文章:

  • 上海市计算机学会竞赛平台2024年5月月赛丙组城市距离之和
  • 穷举vs暴搜vs深搜vs回溯vs剪枝(典型算法思想)—— OJ例题算法解析思路
  • 在ubuntu 24.04.2 通过 Kubeadm 安装 Kubernetes v1.31.6
  • 基于Python socket库构建的基于 P2P 的文件共享系统示例
  • JavaScript 函数重载:灵活应对多场景的编程技巧
  • 通过 PromptTemplate 生成干净的 SQL 查询语句并执行SQL查询语句
  • 用大白话解释缓存Redis +MongoDB是什么有什么用怎么用
  • 计算机毕业设计SpringBoot+Vue.js汽车销售网站(源码+文档+PPT+讲解)
  • 【0010】HTML水平线标签详解
  • FastExcel与Reactor响应式编程深度集成技术解析
  • Netty是如何实现零拷贝的?
  • 【大模型➕知识图谱】大模型结合医疗知识图谱:解锁智能辅助诊疗系统新范式
  • Spring Boot @Component注解介绍
  • MulFS-CAP: Multimodal Fusion-supervisedCross-modal
  • WordPress多语言插件GTranslate
  • wordpress子分类调用父分类名称和链接的3种方法
  • Prometheus + Grafana 监控
  • 初学STM32之简单认识IO口配置(学习笔记)
  • springboot2.7.18升级springboot3.3.0遇到的坑
  • gtest 和 gmock讲解
  • GC垃圾回收介绍及GC算法详解
  • 2020 年英语(一)考研真题 笔记(更新中)
  • 【springboot】Spring 官方抛弃了 Java 8!新idea如何创建java8项目
  • playbin之autoplug_factories源码剖析
  • 正浩创新内推:校招、社招EcoFlow社招内推码: FRQU1CY
  • 一文了解:部署 Deepseek 各版本的硬件要求
  • 有没有什么免费的AI工具可以帮忙做简单的ppt?
  • python绘图之灰度图
  • 华为 VRP 系统简介配置SSH,TELNET远程登录
  • 1.14 重叠因子:TRIMA三角移动平均线(Triangular Moving Average, TRIMA)概念与Python实战