在 JavaScript 中逐行读取文件
本文将介绍使用 Vanilla JS 和 JavaScript 框架 Node.js 使用 JavaScript 读取文件的方法。
我们可以创建一个简单的 JavaScript 函数来读取作为 HTML 输入放入的本地文件。
我们可以使用 input
HTML 标签来上传文件,并使用函数 FileReader()
从文件中逐行读取内容。
代码示例:
<input type="file" name="file" id="file" />
document.getElementById('file').onchange = function(){
var file = this.files[0];
var reader = new FileReader();
reader.onload = function(progressEvent){
console.log(this.result);
};
reader.readAsText(file);
};
在这里,输入字段由 getElementById
方法选择,该方法将在更改时触发该函数(无论何时选择文件)。我们创建对象 FileReader()
的新实例。当实例 reader.onload
被触发时,一个带有参数 progressEvent
的函数被调用,我们可以在控制台上将文件的全部内容打印为 console.log(this.result)
。
我们可以扩展函数来逐行读取文件内容,如下图。
document.getElementById('file').onchange = function(){
var file = this.files[0];
var reader = new FileReader();
reader.onload = function(progressEvent){
var fileContentArray = this.result.split(/\r\n|\n/);
for(var line = 0; line < lines.length-1; line++){
console.log(line + " --> "+ lines[line]);
}
};
reader.readAsText(file);
};
前一个方法的扩展片段使用 split()
来拆分 result 变量读取的内容并将其存储到数组 fileContentArray
变量中。然后使用 for
循环遍历 fileContentArray
变量的每一行并逐行打印文件内容。
出于测试目的,我们创建了一个 demo.txt
文件,其中包含以下内容。
Line 1
Line 2
Line 3
Line 5
现在,我们可以看到文件有五行,从 HTML Input 元素上传文件时,我们可以看到文件的内容,如下面的输出所示。
输出:
1 --> Line 1
2 --> Line 2
3 --> Line 3
4 -->
5 --> Line 5
我们可以忽略内容 1 -->
因为它是为了可视化文件的行号。
我们应该确保我们已经安装了 Node 来使用这个方法。我们可以通过在终端或命令提示符中键入 node -v
来检查。我们现在可以使用 readline
模块轻松读取文件的内容。我们创建一个文件 app.js,
并在文件 app.js
的第一行,我们导入模块,如下所示。
const readline = require('readline');
const fs = require('fs');
由于 readline
模块内置在 Node.js 中,我们没有明确安装它。我们可以使用 fs
模块来创建可读流。这是因为 readline
模块仅与可读流兼容。
示例代码:
const readLine = require('readline');
const f = require('fs');
var file = './demo.txt';
var rl = readLine.createInterface({
input : f.createReadStream(file),
output : process.stdout,
terminal: false
});
rl.on('line', function (text) {
console.log(text);
});
我们可以将文件 app.js
保存到与文件 demo.txt
相同的文件夹中,然后使用命令 node app.js
运行。
输出:
Line 1
Line 2
Line 3
Line 5
我们可以使用 Node.js line-reader
模块在 JavaScript 中读取文件。该模块是开源的,我们需要使用 npm install line-reader --save
或 yarn add line-reader
命令来安装它。
使用 line-reader
模块读取文件内容很容易,因为它提供了 eachLine()
方法。它让我们一行一行地读取文件。我们可以在我们的文件 app.js
的顶部将它导入为 const lineReader = require('line-reader')
。
eachLine()
方法采用带有两个参数的回调函数。参数是 line
和 last
。选项 line
存储内容,选项 last
告诉读取的行是否是文件中的最后一行。第二个选项代表一个布尔值。
示例代码:
const lineReader = require('line-reader');
lineReader.eachLine('./demo.txt',(line,last)=>{
console.log(line);
})
我们可以将文件 app.js
保存到文件 demo.txt
所在的文件夹,或者我们可以显式设置文件的路径,它将逐行读取文件的内容并将输出打印到控制台。
输出:
Line 1
Line 2
Line 3
Line 5
相关文章
在 Angular 中上传文件
发布时间:2023/04/14 浏览次数:71 分类:Angular
-
本教程演示了如何在 Angular 中上传任何文件。我们还将介绍如何在文件上传时显示进度条,并在上传完成时显示文件上传完成消息。
Angular 中所有 Mat 图标的列表
发布时间:2023/04/14 浏览次数:91 分类:Angular
-
本教程演示了在哪里可以找到 Angular 中所有 Mat 图标的列表以及如何使用它们。
Angular 2 中的复选框双向数据绑定
发布时间:2023/04/14 浏览次数:139 分类:Angular
-
本教程演示了如何一键标记两个复选框。这篇有 Angular 的文章将着眼于执行复选框双向数据绑定的不同方法。
在 AngularJS 中重新加载页面
发布时间:2023/04/14 浏览次数:142 分类:Angular
-
我们可以借助 windows.location.reload 和 reload 方法在 AngularJS 中重新加载页面。
在 AngularJs 中设置 Select From Typescript 的默认选项值
发布时间:2023/04/14 浏览次数:78 分类:Angular
-
本教程提供了在 AngularJs 中从 TypeScript 中设置 HTML 标记选择的默认选项的解释性解决方案。
在 AngularJS 中启用 HTML5 模式
发布时间:2023/04/14 浏览次数:150 分类:Angular
-
本文讨论如何在 AngularJS 应用程序上启用带有深度链接的 HTML5 模式。
在 AngularJs 中加载 spinner
发布时间:2023/04/14 浏览次数:107 分类:Angular
-
我们将介绍如何在请求加载时添加加载 spinner,并在 AngularJs 中加载数据时停止加载器。
在 Angular 中显示和隐藏
发布时间:2023/04/14 浏览次数:78 分类:Angular
-
本教程演示了 Angular 中的显示和隐藏。在开发商业应用程序时,我们需要根据用户角色或条件隐藏一些数据。我们必须根据该应用程序中的条件显示相同的数据。
在 Angular 中下载文件
发布时间:2023/04/14 浏览次数:104 分类:Angular
-
本教程演示了如何在 angular 中下载文件。我们将介绍如何通过单击按钮在 Angular 中下载文件并显示一个示例。