`
kinkding
  • 浏览: 150149 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

快速读取文件行数

    博客分类:
  • JAVA
阅读更多

package filesplit;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.LineNumberReader;

public class LineCount {
    public static void main(String[] args) throws IOException {
        LineCount app = new LineCount();
        app.compareBufferAndLineNumber();
    }

    public void compareBufferAndLineNumber() throws IOException {
        String fileName = "F:\\mywork\\filesplit\\AllLog";
        long time = System.currentTimeMillis();

        System.out.println("LineNumberReader" + this.getTotalLines(fileName));
        System.out.println(System.currentTimeMillis() - time);

        time = System.currentTimeMillis();

        System.out.println("BufferedReader" + this.getTotalLines2(fileName));
        System.out.println(System.currentTimeMillis() - time);

        time = System.currentTimeMillis();

        System.out.println("BufferedInputStream" + this.count(fileName));
        System.out.println(System.currentTimeMillis() - time);

        // 从输出结果来看,反而是BufferedInputStream是最快的。
        // LineNumberReader8663721
        // 6203
        // BufferedReader8663721
        // 6016
        // BufferedInputStream8663720
        // 1609

    }

    /**
     * 采用 LineNumberReader方式读取总行数
     *
     * @param fileName
     * @return
     * @throws IOException
     */
    private int getTotalLines(String fileName) throws IOException {
        FileReader in = new FileReader(fileName);
        LineNumberReader reader = new LineNumberReader(in);
        String strLine = reader.readLine();
        int totalLines = 0;
        while (strLine != null) {
            totalLines++;
            strLine = reader.readLine();
        }
        reader.close();
        in.close();
        return totalLines;
    }

    /**
     * 采用BufferedReader方式读取总行数
     *
     * @param fileName
     * @return
     * @throws IOException
     */
    private int getTotalLines2(String fileName) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader(fileName));
        String strLine = br.readLine();
        int totalLines = 0;
        while (strLine != null) {
            totalLines++;
            strLine = br.readLine();
        }
        br.close();
        return totalLines;
    }

    /**
     * 采用BufferedInputStream方式读取文件行数
     *
     * @param filename
     * @return
     * @throws IOException
     */
    public int count(String filename) throws IOException {
        InputStream is = new BufferedInputStream(new FileInputStream(filename));
        byte[] c = new byte[1024];
        int count = 0;
        int readChars = 0;
        while ((readChars = is.read(c)) != -1) {
            for (int i = 0; i < readChars; ++i) {
                if (c[i] == '\n')
                    ++count;
            }
        }
        is.close();
        return count;
    }

}

 

从执行结果来看,采用BufferedInputStream方式是最快的。

分享到:
评论

相关推荐

    获取上传的文件行数的最快速的java代码

    标题提到的“获取上传的文件行数的最快速的java代码”关注的就是这一问题。传统的逐行读取文件的方法可能会消耗大量内存,因为整个文件内容会被加载到内存中。为了避免这种问题,我们可以采用流式处理(Streaming)...

    MATLAB中获取大型文本文件行数程序

    在MATLAB中处理大型文本文件时,获取文件行数是一个常见需求。由于这类文件往往无法一次性加载到内存中,因此需要采取一些特别的方法来读取并统计行数。以下将详细介绍几种不同的方法,并解释它们的工作原理和适用...

    matlab开发-文件的行数

    Perl是一种优秀的文本处理语言,因此当需要快速计算文件行数时,可以借助Perl的便利性。 `select_files.m` 是一个MATLAB脚本,可能用于选择特定类型的文件或者从某个目录下选取文件。它通常包含`dir`或`listFiles`...

    统计文件夹下文件行数

    除了编写脚本,还有一些现成的工具和命令行工具,如`wc`(在Unix/Linux系统中)或某些IDE(如Visual Studio Code)提供的插件,也能快速统计文件行数。 综上所述,"统计文件夹下文件行数"是一个实用的IT技能,它...

    从数据库中读取指定行数记录

    ### 从数据库中读取指定行数记录 在数据库操作中,经常需要从表中读取特定数量的数据记录。例如,我们可能希望从一个表中读取从第三条记录开始的若干条数据。这种需求常见于分页显示、数据分批处理等场景。本文将...

    统计文件行数

    "统计文件行数"工具提供了这样的功能,它强调了其易用性、效率和无需安装的特点,使得用户可以快速便捷地获取所需信息。 统计文件行数通常涉及以下知识点: 1. **文本文件**:大多数编程语言的源代码是文本文件,...

    QT文件查询,查询单个文件和文件夹下所有文件行数

    QT文件查询是一个基于Qt...通过上述知识点,我们可以构建出一个功能完善的“QT文件查询”应用,满足用户快速统计文件和文件夹下所有文件行数的需求。这个应用不仅可以作为学习Qt编程的一个实例,也具有实际的实用价值。

    获取文本行数函数

    一般而言,这可以通过读取文本文件,逐行计数来实现。然而,在图形用户界面(GUI)应用中,尤其是在使用多行文本框时,直接访问文本内容并计数可能不够高效。因此,Windows API提供了`EM_GETLINECOUNT`消息,专门...

    基于c++的简易csv快速读写文件

    综上所述,基于C++的简易CSV快速读写文件项目通过`fstream`和`chrono`库实现了高效且易于使用的文件操作功能,适合处理大规模的CSV数据。开发者可以灵活定制读写策略,同时监控性能,从而优化数据处理流程。提供的源...

    文件按指定行数分解成小文件

    总之,"文件按指定行数分解成小文件"的实现是C语言文件操作能力的体现,它结合了文件读写、命令行参数处理以及动态文件管理等多个技术点。对于学习C语言和文件处理的开发者来说,这是一个很好的实践项目。

    java统计源码行数

    // 使用之前的LineCounter类或代码来计算文件行数 } } ``` 在这个例子中,`countLinesInDirectory`方法遍历指定目录及其子目录中的所有文件,只处理扩展名为`.java`的文件。`countLinesInFile`方法则用于调用之前...

    文件夹内统计行数文件夹内统计行数

    在命令行环境下,例如在Linux或macOS中,我们可以使用`wc -l`命令来快速统计一个文件的行数。`wc`是“word count”的缩写,用于计算文件的单词数、字符数和行数。加上`-l`参数,它只会返回行数。如果需要统计整个...

    获取一个文件行数的方法

    "获取一个文件行数的方法" 获取一个文件行数是编程中的一项基本操作,掌握获取文件行数的方法可以让开发者更好地处理文件数据。获取文件行数有多种方法,本文将介绍两种常见的方法。 第一种方法:使用fgetc函数 ...

    文件行数统计程序代码.zip_代码统计_统计代码行数

    "文件行数统计程序代码.zip"是一个压缩包,包含用于统计代码行数的程序代码。这个程序可能是一个命令行工具或者一个库,能够帮助用户快速地对源代码文件或整个代码库进行分析,输出不同类型的代码行数,例如空行、...

    快速代码行数统计.rar

    "快速代码行数统计.rar" 是一个压缩包,内含一个名为 "代码行数统计.exe" 的可执行文件,其设计目的就是帮助用户快速统计代码文件或整个项目中的代码行数。这个工具的使用方法简单,用户可以直接将包含代码的文件夹...

    VB6.0编写的读取txt文件内容参考程序,路径可选择

    标题中的“VB6.0编写的读取txt文件内容参考程序”指的是使用Visual Basic 6.0(简称VB6.0)开发的一个应用程序,它的功能是读取TXT文本文件的内容。VB6.0是Microsoft公司推出的一种面向对象的编程语言,广泛应用于...

    用Python代码统计文件夹下文件行数(一秒搞定、一看就会).zip

    总结一下,这个Python脚本利用了os模块的功能,通过`os.walk()` 遍历目录,`open()` 和 `readlines()` 组合统计文件行数,从而实现快速统计代码行数的需求。这在日常的开发和项目管理中非常有用,可以大大提高工作...

    MyLineCounter统计代码行数的工程(递归+工作队列)

    - **文件读取**:逐行读取文件,跳过注释和空行。 - **工作队列实现**:可以使用`queue`库创建一个队列,配合多线程或异步IO模型(如Python的`threading`或`asyncio`库)来实现。 - **结果汇总**:统计每个文件的...

    Linux下求某一文件的行数

    总结一下,Linux环境下查询文件行数主要依赖`wc`命令,配合`-l`选项可快速得到结果。对于跨平台的文件处理,需要考虑不同系统间的换行符差异,并可能需要使用额外的工具如`tr`或编程语言中的特定方法来确保正确处理...

    易语言读取文本行数的方法

    在易语言中处理文本数据是一项常见的任务,其中读取文本行数是其中一个重要的操作,这对于数据分析、日志处理或者用户界面的显示等场景非常有用。下面将详细介绍如何在易语言中实现这个功能。 首先,我们要明白...

Global site tag (gtag.js) - Google Analytics