javascript – 如何在不打开文本文件的情况下获取文本文件中的行数?

我正在开发这个代码,在用户选择目录后,它会显示该位置包含的文件的表格及其详细信息(名称,类型,大小……).

目录可能包含许多文件.

我成功实现了这一目标.但是,我的问题是我想显示每个文件中的行数.我可以使用此JavaScript代码获取行数:

var reader = new FileReader();
var textFile = $("#file").get(0).files[0];
reader.readAsText(textFile);
$(reader).on('load',processFile);
/*And in processFile() i use this line to get the number of lines :*/
nbLines = (file.split("\n")).length;

上面的代码按预期工作,它给了我想要的东西,但如果所选目录中有这么多文件,它可能会很重要!

问题:有没有办法在不读取文本文件的情况下获取行数?

问候!

解决方法

如果不读取文件中的行数,则无法计算.运行代码的操作系统不会将行数存储为某种元数据.它们通常甚至不区分二进制文件和文本文件!您只需阅读文件并计算换行符即可.

但是,如果文件中包含大量行,则可以比现在更快地执行此操作.

这行代码是我担心的:

nbLines = (file.split("\n")).length;

在此处调用split会创建大量内存分配,每个文件对应一行.

我的预感是,在for循环中直接计算换行符会更快:

function lineCount( text ) {
    var nLines = 0;
    for( var i = 0,n = text.length;  i < n;  ++i ) {
        if( text[i] === '\n' ) {
            ++nLines;
        }
    }
    return nLines;
}

这会对没有任何内存分配的换行符进行计数,并且大多数JavaScript引擎都应该很好地优化此代码.

根据您想要解释的方式,您可能还希望根据文件是否以换行结束来稍微调整最终计数.但是不要在循环中做到这一点,之后再做.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...