`
kinkding
  • 浏览: 147920 次
  • 性别: 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代码

    获取上G的文件行数的最快速的java代码 占用内存少,而且最快的获取海量文件的java代码

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

    如何用sql返回第三条或者第三条记录开始返回? 从数据库中的表中从第三条记录开始取,那么select该怎么写呢?

    php超快高效率统计大文件行数

    用php获取文件行数,网上给出的答案通常是使用file这样一次性读取,这样不适用在大文件。通常大文件大家用while来循环的逐行统计,这样的效率太慢 最快的方法是多行统计,每次读取N个字节,然后再统计行数,这样比...

    LabVIEW以字符串的行读取形式读取文本最后一行.zip

    这是LabVIEW以字符串的读取行的形式来快速读取文本最后一行的源程序。详见本人博客:https://blog.csdn.net/jaysur/article/details/99226617

    快速查看超大文件指定内容

    c#开放的大型文件查看...主要用途:对于超大型文件,一般软件无法打开读取,或者需要超长时间,这个程序能读取指定行数的文档内容,还可以统计总行数。读取内容时,速度非常快。对于大家学习文档读取等,应该有帮助。

    文件实时监控工具Tail源码20130415

    Tail 可以快速显示大文件的末尾部分,而无需加载整个文件。并且其可以用于查看一个正在增长的文件。Tail 仅是一个文件查看器,其不会对文件进行任何更改。TailUI 是 Tail 的 GUI 桌面程序。 功能选项 -f, --follow...

    CSharp Excel操作

    4.一句话读取Excel文档使用的行数和列数 5.一句话实现Excel文件复制,保存副本,并且设置禁止 弹出保存和覆盖的询问提示框 6.DataSet数据集实现快速查找指定条件的数据 7.两篇Excel文档进行内容比对 8.包括数据库,...

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    实例093 获取多维数组的行数与列数 110 实例094 按指定条件在数组中检索元素 111 实例095 在数组中添加一个元素 112 实例096 在数组中添加一个数组 113 实例097 不改变长度删除数组中的元素 115 实例098 删除数组...

    Get-ContentFast:Get-Content 的快速替代方案

    快速获取内容 Get-Content 的快速替代方案 ####SYNOPSIS Get-Content 的快速替代方案 ####DESCRIPTION Get-Content 是一个缓慢但功能强大的 cmdlet。... ####PARAMETER TotalCount 从文件开头获取指定的行数。

    入门学习Linux常用必会60个命令实例详解doc/txt

    文件为doc版,可自行转成txt,在手机上看挺好的。 本资源来自网络,如有纰漏还请告知,如觉得还不错,请留言告知后来人,谢谢!!!!! 入门学习Linux常用必会60个命令实例详解 Linux必学的60个命令 Linux提供...

    300个注册表优化修改文件

    提高光驱的读写能力.reg 提高历史缓冲区的个数.reg 提高软驱的性能.reg 提高显示器刷新频率.reg 停用Windows的文件高速缓存.reg 退出时不保存环境设置.reg 完全禁用系统还原.reg 消除软件显示乱码.reg 修改...

    Android开发人员不得不收集的代码

    getFileLines : 获取文件行数 getDirSize : 获取目录大小 getFileSize : 获取文件大小 getDirLength : 获取目录长度 getFileLength : 获取文件长度 getFileMD5 : 获取文件的 MD5 校验码 getFileMD5ToString : 获取...

    JAVA记事本【可拖读文件】源码

    JAVA记事本终于完成了,在过些天从里面选出部分做个笔记整理,增加对JAVA图形... 用于编程时快速的定位; (三).支持对文本框内 字体 、字形、大小、颜色的调整; (四).调色板功能; 还有部分问题等学习之后再解决```。

    标签单据编辑器3.1.0.2

    03.添加常量列表,可设置模板文件的常量信息,常量可用于如:表格行数的标记,程序直接根据对应常量值打印出对应的行数。 04.添加关联列表,关联列表显示的是模板当前支持的关联信息(防止出错以及忘记支持的标记...

    Visual C++编程技巧精选500例.pdf

    222 如何从文本文件中读取一个字符串? 第12章 文件与文件夹属-操作 223 如何判断文件只读属性? 224 如何设置文件只读属性? 225 如何判断文件隐藏属性? 226 如何设置文件隐藏属性? 227 如何判断文件归档属性? 228 ...

Global site tag (gtag.js) - Google Analytics