【问题标题】:Count Line Numbers of File in Java在 Java 中计算文件的行数
【发布时间】:2015-02-27 16:18:11
【问题描述】:

我正在尝试计算行号。 使用 Java LineNumberReader 的文件。输出有问题。问题是 显示替代行,如行号。 1,3,5,... 计算总行数我得到了一半。总的实际线路。这是代码

import java.lang.*;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;

public class countLine{
    File file=null;
    public countLine(){
            file =new File("E:\\test.txt");
        getFileData();
    }
    public void getFileData(){
            try{ 
                if(file.exists()){
                    FileReader fr = new FileReader(file);
                    LineNumberReader lnr = new LineNumberReader(fr); 
                    int linenumber = 0;
                        do{
                System.out.println(lnr.readLine());
                        linenumber++;
                        }while (lnr.readLine() != null);
                        System.out.println("Total number of lines : " + linenumber);
                        lnr.close();
                }else{
                     System.out.println("File does not exists!");
                }
            }
        catch(Exception e){
            e.printStackTrace();
        }   
    }   
    public static void main(String h[]){
        countLine cl = new countLine(); 
    }
}

【问题讨论】:

  • 每次调用readLine 都会读取一行...
  • 第 1,3,5 行等被打印出来。在计算总数。例如行数。有 10 行然后在输出中我只得到 5
  • 并使用 lnr.getLineNumber() 作为行号。

标签: java file-io java-io


【解决方案1】:

你读了两遍,一次是System.out.println(lnr.readLine());,一次是while (lnr.readLine() != null);

将其他两个答案合二为一可以提供正确的行数以及使用行内容执行System.out.println(...) 的能力:

int linenumber = 0;
String tmp = new String();
while ((tmp = lnr.readLine()) != null) {
    linenumber++;
    System.out.println(tmp);
}

【讨论】:

  • 正确的方法是什么?
  • 作为建议的其他答案之一,取决于您是否需要行内容的 System.out.println(Naor 的答案)或不需要(laune 的答案)。
  • 是的,没关系。据我了解,您的原始代码还有一个错误,如果我没看错的话,do-while 计算的一行太多了。但我没有对这个假设进行单元测试。
  • 很抱歉我太快接受这两个答案。 Naor 的回答过多计算一行,您需要使用 -1 初始化行号。
【解决方案2】:

这已经足够计数了:

FileReader fr = new FileReader(file);
LineNumberReader lnr = new LineNumberReader(fr); 
while (lnr.readLine() != null);
System.out.println( lnr.getLineNumber() );
lnr.close();

稍后添加或者,如果您需要打印行(+行号):

String line = null;
while ((line = lnr.readLine()) != null){
    System.out.println( lnr.getLineNumber() + " " +  lnr.getLineNumber() );
}

【讨论】:

  • 谢谢..但是如果我想打印该行号的内容该怎么办
【解决方案3】:

你可以用两行代码得到行数:类似

lineNumberReader.skip(Long.MAX_VALUE);
int count = LineNumberReader.getLineNumber();

电子与工程

【讨论】:

    【解决方案4】:

    每个 lnr.readLine() 从文件中读取一行并返回它。
    您正在阅读两篇文章:
    1)在 System.out.println
    2)在while语句中

    您需要调用 readLine 方法,
    将结果保存在变量中,当它为空时是文件的结尾。

    看看:

    int linenumber = 0;
    String tmp = new String();
    while ((tmp = lnr.readLine()) != null) {
        linenumber++;
        System.out.println(tmp);
    }
    

    【讨论】:

    • tmp 在下一行被分配时,为什么要初始化它?什么是“如果文件为空,则不算数!!!”意思是?这个问题你要回答多少次?
    • 我正在重写我之前的答案,真的不那么理解对不起.. :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 2012-09-09
    • 2012-09-24
    相关资源
    最近更新 更多