计算文件

时间:2016-03-13 12:26:35

标签: java while-loop java-8

我编写了一段代码来计算文件中的行数(我无法找到可以在IO类中实现此功能的内置方法)。我的代码如下:

try {
    while(!line.equals("null")) {
        line = bufferedReader.readLine();
        a = a + 1;
        System.out.println(a + " " + line);
    }
} catch (NullPointerException N) {}

我遇到的问题是,当变量'line'计算为“null”时,计数仍然增加。我明白为什么会这样;在整个代码块运行之后,while语句才会检查条件,在这种情况下,'a'将再次增加。我考虑过的解决方案:

1)设置'a = -1',而我目前在此代码块之前有'a = 0' 2)使用if语句在达到count变量之前打破循环。这就是我修改代码块的方法:

try {
    while(!line.equals("null")) {
        line = bufferedReader.readLine();
        if (line.equals("null")) {break;}
        a = a + 1;
        System.out.println(a + " " + line);
    }
} catch (NullPointerException N) {}

我的上述问题? (1)似乎太做作,而(2)似乎多余。我想知道是否有更好的方法来解决这个问题 - 感谢您的建议。

3 个答案:

答案 0 :(得分:8)

除非您的文件以包含字符串“null”的行结尾,否则您的代码是错误的。您应该与null进行比较,而不是“null”。

关于你原来的问题,你可以通过读取一行并在循环条件下测试null来避免额外的计数:

while((line = bufferedReader.readLine()) != null) {
    a = a + 1;
    System.out.println(a + " " + line);
}

答案 1 :(得分:5)

有一个LineNumberReader类可以完全按照您的要求进行操作。

try(LineNumberReader  lnr = new LineNumberReader(new FileReader(new File("file.txt"))) {
    lnr.skip(Long.MAX_VALUE);
    linesCount = lnr.getLineNumber() + 1; //because it's index from 0
}

答案 2 :(得分:4)

尽管有其他(好的)答案,我认为值得发布一个替代的,简单的解决方案:

long lineCount = Files.lines(Paths.get(filename)).count();