我们如何确定文本文件中的行数?

时间:2011-11-11 04:49:58

标签: java text io

大家好我有一个本地file,看起来像这样:

AAA   Anaa
AAC   EL-ARISH
AAE   Annaba 
AAF   APALACHICOLA MUNI AIRPORT
AAG   ARAPOTI
AAL   Aalborg Airport
AAM   Mala Mala
AAN   Al Ain 
AAQ   Anapa
AAR   Aarhus Tirstrup Airport
AAT   Altay
AAX   Araxa
AAY   Al Ghaydah
...

Java Tutorials建议通过java.io.File.length估算文件中的行数 并将结果除以50。

但是,是否有更“坚实”的方法来获取文本文件中的行数(但无需支付读取整个文件的开销)?

3 个答案:

答案 0 :(得分:8)

你不能只用FileReader读取文件并计算读取的行数吗?

int lines = 0;
BufferedReader br = new BufferedReader(new FileReader("foo.in"));
while (br.readLine != null) {
    lines++;
}

答案 1 :(得分:2)

您获得的估算算法的好处是它非常快:一个stat(2)调用然后一些除法。无论文件有多大或多小,它都需要相同的时间和内存。但是,对于大量的投入来说,这也是非常错误的。

获取特定数字的最佳方法可能是实际读取整个文件以查找'\n'个字符。如果你用大的二进制块读取文件(想想16384字节或更大的2的幂)并查找你感兴趣的特定字节,它可以接近磁盘IO带宽。

答案 2 :(得分:1)

您需要使用BufferedReadercounter为每个readLine()增加值1。