Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在Node.js中如何逐行读取文件

在Node.js中如何逐行读取文件

作者头像
ccf19881030
发布于 2020-10-29 03:45:31
发布于 2020-10-29 03:45:31
14K00
代码可运行
举报
文章被收录于专栏:ccf19881030的博客ccf19881030的博客
运行总次数:0
代码可运行

在Node.js中如何逐行读取文件

本文翻译自How to read a file line by line in Node.js

能够逐行读取文件为我们提供了一个读取大型文件的机会,而无需将它们完全加载到内存中。 它还允许我们仅查找相关信息,并在找到该信息后停止搜索。

我们已经讨论了如何在Java中逐行读取文件,让我们看一下Node.js逐行读取文件的方式。

FS模块

在Node.js中逐行读取文件的最简单方法是使用本地fs模块fs.readFileSync()方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const fs = require('fs');

try {
    // read contents of the file
    const data = fs.readFileSync('file.txt', 'UTF-8');

    // split the contents by new line
    const lines = data.split(/\r?\n/);

    // print all lines
    lines.forEach((line) => {
        console.log(line);
    });
} catch (err) {
    console.error(err);
}

此方法将文件的全部内容同步读取到内存中,然后通过换行符拆分其内容。 乍看起来,它看起来很完美,但是有两个问题:

  • 1.它是阻塞的,这意味着它将阻塞程序的执行,直到将整个文件加载到内存中为止。
  • 2.如果文件很大(千兆字节或更多),将对内存消耗产生严重影响。 通过使用非阻塞版本fs.readFile()可以解决第一个问题,但是在生产环境中,您不需要执行将整个文件读入内存的操作。

但是,如果您只想读取小文件,则可以正常工作。

Readline模块

Readline是另一个Node.js本机模块,是专门为此目的开发的-从任何readable stream中一次读取一行。 您甚至可以使用此模块从命令行读取输入数据。

这是您可以在代码中访问它的方式(无需安装):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const readline = require('readline');

由于readline模块适用于可读流,因此我们必须首先使用fs模块创建流,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const rl = readline.createInterface({
    input: fs.createReadStream('file.txt'),
    output: process.stdout,
    terminal: false
});

现在,我们可以侦听rl对象上的line事件,该事件将在从流中读取新行时触发:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rl.on('line', (line) => {
    console.log(line);
});

完整的代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const fs = require('fs');
const readline = require('readline');

const rl = readline.createInterface({
    input: fs.createReadStream('file.txt'),
    output: process.stdout,
    terminal: false
});

rl.on('line', (line) => {
    console.log(line);
});

Line-Reader模块

line-reader是一个开源模块,用于在Node.js中逐行读取文件。 您可以通过在终端中运行以下命令将其添加到项目中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ npm i line-reader --save

如果使用的是yarn,可以通过在终端中运行以下命令将其添加到项目中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ yarn add line-reader

line-reader模块提供了eachLine()方法,该方法读取给定文件的每一行。 它需要一个带有两个参数的回调函数:行内容和一个布尔值,指定读取的行是否为文件的最后一行。 这是一个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const lineReader = require('line-reader');

lineReader.eachLine('file.txt', (line, last) => {
    console.log(line);
});

使用此模块的另一个好处是,当某些情况变为真时,停止读取。 可以通过从回调函数返回false来实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const lineReader = require('line-reader');

lineReader.eachLine('file.txt', (line) => {
    console.log(line);

    // stop if line contains `NEW`
    if(line.includes('NEW')) {
        // stop reading and close the file
        return false;
    }
});

LineByLine模块

linebyline是另一个开放源代码库,可用于在Node.js中逐行读取文件。

让我们将其添加到您的项目中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ npm i linebyline --save

这个包简单地在内部流本机readline模块,读取和缓冲新行,为每行发出一个行事件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const readline = require('linebyline');

// read all lines
rl = readline('file.txt');

// listen for `line` event
rl.on('line', (line, lineCount, byteCount) => {
    console.log(line);
}).on('error', (err) => {
    console.error(err);
});
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/10/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
大厂面试题分享:如何让6000万数据包和300万数据包在仅50M内存环境中求交集
由于最近疫情的影响,相信最近很多小伙伴都忙于线上办公或者面试?,笔者这里分享一道发生在大厂前端线上编程面试中的一道题目, 如何让 6000 万数据包和 300 万数据包在仅 50M 内存环境中求交集,
wscats
2020/06/05
9100
Nodejs进阶:readline实现日志分析+简易命令行工具
模块概览 readline是个非常实用的模块。如名字所示,主要用来实现逐行读取,比如读取用户输入,或者读取文件内容。常见使用场景有下面几种,本文会逐一举例说明。本文相关代码可在笔者github上找到。
IMWeb前端团队
2017/12/28
1.4K0
如何用 Node.js 实现一个微型 CLI
命令行界面(英语:command-line interface,缩写:CLI)是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。
林小帅
2020/04/06
1K0
如何用 Node.js 实现一个微型 CLI
前端笔试之JavaScript ACM模式
前端笔试之JavaScript ACM模式 前言 相信很多小伙伴刷算法题,都是用力扣。但是,力扣是核心代码模式,是不需要处理输入、输出的,只需要直接返回值就行。笔试、面试的时候,不一定是核心代码模式,也可能是ACM模式。如果没有了解过JavaScript的输入输出可能就寄了。(本人就试过突然ACM模式笔试,后面不知道怎么输入输出,直接重操旧业,用C++来做题😂) 祝看到这篇文章并且在找工作的,顺顺利利拿到心仪的offer。(包括本人🐶) JavaScript的ACM模式会有两种:V8模式、Node
赤蓝紫
2023/03/16
3.8K0
前端笔试之JavaScript ACM模式
Node.js 中使用 fs 模块进行文件读写操作详解
在现代 Web 开发中,Node.js 以其独特的非阻塞 I/O 和事件驱动架构,已经成为服务器端开发的首选平台之一。而在 Node.js 的核心模块中,fs(文件系统)模块扮演着至关重要的角色。它提供了丰富的 API,使得开发者能够轻松地进行文件的读取、写入、追加、复制和删除等操作。本文将深入探讨 fs 模块的使用方法,通过详细的示例代码,帮助读者掌握在 Node.js 环境下进行文件操作的基本技能。
Front_Yue
2024/12/25
4450
Node.js 中使用 fs 模块进行文件读写操作详解
【英文】Node.js Streams: Everything you need to know //转载
Node.js streams have a reputation for being hard to work with, and even harder to understand. Well I’ve got good news for you — that’s no longer the case.
Jean
2019/12/06
8620
【英文】Node.js Streams: Everything you need to know //转载
Node.js 控制台动画,绘制跨年祝福
今天是 2021 年的最后一天了,明天就是 2022 年。回顾过去一年,要特别感谢大家对我的支持。
神说要有光zxg
2022/01/07
2.2K0
Node.js 控制台动画,绘制跨年祝福
[译]关于Node.js streams你需要知道的一切
Node.js的stream模块是有名的应用困难,更别说理解了。那现在可以告诉你,这些都不是问题了。
frontoldman
2019/09/02
1.1K0
[译]关于Node.js streams你需要知道的一切
必应API接口node.js版 - 极客玩家大白
近期,在研究百度、必应、API等的url提交API时,发现有用Go语言做工具的大佬的分享 利用 API 自动向搜索引擎提交网址(Go语言版) - pyList。
Enjoy233
2020/09/17
1.1K0
必应API接口node.js版 - 极客玩家大白
Node.js Streams在数据处理和传输中的应用
在现代的数据驱动型应用中,高效的数据处理和传输是至关重要的。Node.js作为一种流行的服务器端JavaScript运行环境,提供了一种强大的机制来处理数据的流动,即Streams。无论是在文件系统操作、网络通信还是在复杂的数据处理管道中,Streams都发挥着不可替代的作用。它们能够以一种高效、灵活且节省资源的方式处理大量的数据,使得开发者能够构建高性能的应用程序。
Front_Yue
2025/01/11
760
Node.js Streams在数据处理和传输中的应用
一篇文章构建你的 Node.js 知识体系
最近读《重学前端》,开篇就是让你拥有自己的知识体系图谱,后续学的东西补充到相应的模块,既可以加深对原有知识的理解,又可以强化记忆,很不错的学习方案。
五月君
2020/08/28
1.9K0
一篇文章构建你的 Node.js 知识体系
在Node.js中逐行读取文件【纯技术】
在计算机科学中,文件是一种资源,用于在计算机的存储设备中离散地记录数据。Node.js不会以任何方式覆盖它,并且可以与文件系统中被视为文件的任何文件一起使用。
Jean
2019/09/24
8K0
Node.js 文件系统的各种用法和常见场景
在 Node.js 中,文件系统(File System)是一个重要的模块,它提供了许多用于处理文件和目录的功能。通过文件系统模块,我们可以读取、写入、修改、删除文件,以及创建和管理目录等操作。本文将详细介绍 Node.js 文件系统的各种用法和常见场景。
网络技术联盟站
2023/07/07
2890
记一次华为机试
华为机试分为 3 题,两题 100 分,一题 200 分,压线 150 分算你过,时间150分钟,支持多语言环境(牛客网),考试时需全程打开摄像头,电脑屏幕分享,手机打开某小程序(可用计算器)不退出,可用本地 IDE, 会有一些测试题给你熟悉环境预热的。
江涛学编程
2021/03/16
9.5K1
【前端】使用readline模块实现Node.js的输入输出
zhaokang555
2023/10/17
2860
如何使用 Node.js 代码下载 Github issue 到本地
国内的开发者们,有使用 github 上开源的代码仓库上通过提交 issue 的方式进行一些技术或者非技术层面的讨论。
编程小妖女
2025/01/03
1450
如何使用 Node.js 代码下载 Github issue 到本地
Node.js v17 来了,看看都有哪些新功能?
Node.js v17 版本已发布,取代了 v16 做为当前版本,新的 v17 版本提供了一些新功能:基于 Promise 的其它核心模块 API、错误堆栈尾部增加 Node.js 版本信息、OpenSSL 3.0 支持、v8 JavaScript 引擎更新至 9.5。
五月君
2021/10/27
1.8K0
Node.js v17 来了,看看都有哪些新功能?
一键JS混淆加密:功能集成到鼠标右键菜单
目标:将“JS混淆加密”功能集成到鼠标右键菜单,一键点击完成JavaScript代码混淆加密。
用户8703799
2024/04/02
1940
一键JS混淆加密:功能集成到鼠标右键菜单
这里有一份Node.js入门指南和实践,请注意查收
JS 是脚本语言,脚本语言都需要一个解析器才能运行。对于写在 HTML 页面里的 JS,浏览器充当了解析器的角色。而对于需要独立运行的 JS,NodeJS 就是一个解析器。
null仔
2020/02/28
3.7K0
这里有一份Node.js入门指南和实践,请注意查收
Node.js中常用的设计模式有哪些?
设计模式是由经验丰富的程序员在日积月累中抽象出的用以解决通用问题的可复用解决方案,它提供了标准化的代码设计方案提升开发体验。Node.js 作为一款用来构建可扩展高性能应用的流行平台,自然也遵循设计模式解决通用问题。本文中,我们将讨论 Node.js 中设计模式的重要性并提供一些代码示例。
葡萄城控件
2023/10/23
3280
Node.js中常用的设计模式有哪些?
相关推荐
大厂面试题分享:如何让6000万数据包和300万数据包在仅50M内存环境中求交集
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验