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
14.6K00
代码可运行
举报
文章被收录于专栏: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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
在Node.js中逐行读取文件【纯技术】
在计算机科学中,文件是一种资源,用于在计算机的存储设备中离散地记录数据。Node.js不会以任何方式覆盖它,并且可以与文件系统中被视为文件的任何文件一起使用。
Jean
2019/09/24
8.4K0
如何从Node.js中的命令行读取输入
您是否正在使用Node.js中开发一个小的CLI工具,并希望能够提示用户从命令行输入输入? Node.js正是为此目的提供了readline模块。 它提供了一个接口,用于从可读流(例如process.stdin)中一次读取一行数据。
ccf19881030
2020/10/26
9.2K0
Nodejs进阶:readline实现日志分析+简易命令行工具
模块概览 readline是个非常实用的模块。如名字所示,主要用来实现逐行读取,比如读取用户输入,或者读取文件内容。常见使用场景有下面几种,本文会逐一举例说明。本文相关代码可在笔者github上找到。
IMWeb前端团队
2017/12/28
1.4K0
大厂面试题分享:如何让6000万数据包和300万数据包在仅50M内存环境中求交集
由于最近疫情的影响,相信最近很多小伙伴都忙于线上办公或者面试?,笔者这里分享一道发生在大厂前端线上编程面试中的一道题目, 如何让 6000 万数据包和 300 万数据包在仅 50M 内存环境中求交集,
wscats
2020/06/05
9200
Node.js 文件系统的各种用法和常见场景
在 Node.js 中,文件系统(File System)是一个重要的模块,它提供了许多用于处理文件和目录的功能。通过文件系统模块,我们可以读取、写入、修改、删除文件,以及创建和管理目录等操作。本文将详细介绍 Node.js 文件系统的各种用法和常见场景。
网络技术联盟站
2023/07/07
3230
如何使用 Node.js 代码下载 Github issue 到本地
国内的开发者们,有使用 github 上开源的代码仓库上通过提交 issue 的方式进行一些技术或者非技术层面的讨论。
编程小妖女
2025/01/03
2450
如何使用 Node.js 代码下载 Github issue 到本地
从服务端生成Excel电子表格(Node.js+SpreadJS)
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,通常用于创建网络应用程序。它可以同时处理多个连接,并且不像其他大多数模型那样依赖线程。
葡萄城控件
2022/05/09
3.4K0
从服务端生成Excel电子表格(Node.js+SpreadJS)
解析Node.js 中的 Stream(流)
流(Stream)是驱动 Node.js 应用的基础概念之一。它是数据处理方法,用于按顺序将输入读写到输出中。
conanma
2022/01/05
2.9K0
在Node.js中读写文件
本文翻译自Reading and Writing Files in Node.js
ccf19881030
2020/10/29
5.7K0
【前端】使用readline模块实现Node.js的输入输出
zhaokang555
2023/10/17
3460
这里有一份Node.js入门指南和实践,请注意查收
JS 是脚本语言,脚本语言都需要一个解析器才能运行。对于写在 HTML 页面里的 JS,浏览器充当了解析器的角色。而对于需要独立运行的 JS,NodeJS 就是一个解析器。
null仔
2020/02/28
3.8K0
这里有一份Node.js入门指南和实践,请注意查收
Node.js 控制台动画,绘制跨年祝福
今天是 2021 年的最后一天了,明天就是 2022 年。回顾过去一年,要特别感谢大家对我的支持。
神说要有光zxg
2022/01/07
2.3K0
Node.js 控制台动画,绘制跨年祝福
必应API接口node.js版 - 极客玩家大白
近期,在研究百度、必应、API等的url提交API时,发现有用Go语言做工具的大佬的分享 利用 API 自动向搜索引擎提交网址(Go语言版) - pyList。
Enjoy233
2020/09/17
1.2K0
必应API接口node.js版 - 极客玩家大白
如何用 Node.js 实现一个微型 CLI
命令行界面(英语:command-line interface,缩写:CLI)是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。
林小帅
2020/04/06
1.1K0
如何用 Node.js 实现一个微型 CLI
前端笔试之JavaScript ACM模式
前端笔试之JavaScript ACM模式 前言 相信很多小伙伴刷算法题,都是用力扣。但是,力扣是核心代码模式,是不需要处理输入、输出的,只需要直接返回值就行。笔试、面试的时候,不一定是核心代码模式,也可能是ACM模式。如果没有了解过JavaScript的输入输出可能就寄了。(本人就试过突然ACM模式笔试,后面不知道怎么输入输出,直接重操旧业,用C++来做题😂) 祝看到这篇文章并且在找工作的,顺顺利利拿到心仪的offer。(包括本人🐶) JavaScript的ACM模式会有两种:V8模式、Node
赤蓝紫
2023/03/16
3.9K0
前端笔试之JavaScript ACM模式
node读取文件操作
导言:nodejs中所有与文件相关的操作都在fs模块中,而读写操作又是我们会经常用到的操作,nodejs的fs模块针对读操作为我们提供了readFile,read, createReadStream三个方法,针对写操作为我们提供了writeFile,write, createWriteStream三个方法,下面分析一下它们的区别:
全栈程序员站长
2022/09/02
1K0
一篇文章构建你的 Node.js 知识体系
最近读《重学前端》,开篇就是让你拥有自己的知识体系图谱,后续学的东西补充到相应的模块,既可以加深对原有知识的理解,又可以强化记忆,很不错的学习方案。
五月君
2020/08/28
1.9K0
一篇文章构建你的 Node.js 知识体系
一键JS混淆加密:功能集成到鼠标右键菜单
目标:将“JS混淆加密”功能集成到鼠标右键菜单,一键点击完成JavaScript代码混淆加密。
用户8703799
2024/04/02
3010
一键JS混淆加密:功能集成到鼠标右键菜单
Node.js 中使用 fs 模块进行文件读写操作详解
在现代 Web 开发中,Node.js 以其独特的非阻塞 I/O 和事件驱动架构,已经成为服务器端开发的首选平台之一。而在 Node.js 的核心模块中,fs(文件系统)模块扮演着至关重要的角色。它提供了丰富的 API,使得开发者能够轻松地进行文件的读取、写入、追加、复制和删除等操作。本文将深入探讨 fs 模块的使用方法,通过详细的示例代码,帮助读者掌握在 Node.js 环境下进行文件操作的基本技能。
Front_Yue
2024/12/25
6320
Node.js 中使用 fs 模块进行文件读写操作详解
【Node.JS】读取文件内容
fs模块是Node.js官方提供的,用来操作文件的模块,它提供了一系列的方法和属性,用来满足用户对文件的操作需求,
坚毅的小解同志的前端社区
2022/11/28
12.2K0
【Node.JS】读取文件内容
相关推荐
在Node.js中逐行读取文件【纯技术】
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验