在Java中计算一个文件的行数的方法

977 阅读2分钟

学习在Java中使用行的LineNumberReader类来计算文件中的所有行。在所有列出的解决方案中,我们都在迭代这些行,直到遇到最后一行

1.使用行流计算行数

Files.lines() 方法可以用来从一个指定的文本文件中获得行的流。然后我们可以使用stream.count() 方法来计算流中的元素。

请注意,文件是通过关闭流来关闭的。因此,为了使事情不那么冗长,我们可以使用try-with-resources语句,在使用后自动关闭流。

这种方法不需要整个文件存在于内存中,所以对于大文件来说一种有效的解决方案

String fileName = "c:/temp";
long noOfLines = -1;

try (Stream<String> fileStream = Files.lines(Paths.get(fileName))) {
	//Lines count
  	noOfLines = (int) fileStream.count();
}

2.使用LineNumberReader

LineNumberReader 是一个记录行号的输入流阅读器。默认情况下,行数从0开始。

我们可以通过LineNumberReader对文件的引用来计算文件的总行数,skip() 到文件的最后一行。此刻,我们可以通过getLineNumber() 来获得行号计数。

这个方案对于大的文本文件也是很有效的。

String fileName = "c:/temp";
long noOfLines = -1;

try(LineNumberReader lineNumberReader =
    new LineNumberReader(new FileReader(new File(fileName)))) {
    //Skip to last line
  	lineNumberReader.skip(Long.MAX_VALUE);
  	noOfLines = lineNumberReader.getLineNumber() + 1;
}

3.对小文件使用Files.readAllLines()

我们也可以对小文件使用最初的两种解决方案。但是如果文件很小,而且我们要在以后的应用程序代码中引用文件内容,那么将整个文件读入内存是有意义的。

readAllLines() 方法读取整个文件并将所有行作为字符串列表返回。要计算所有的行,使用list.size() 方法。

这个解决方案需要整个文件存在于内存中,所以它对大文件来说不是一个有效的解决方案

String fileName = "c:/temp";
long noOfLines = -1;

try(LineNumberReader lineNumberReader =
    	new LineNumberReader(new FileReader(new File(fileName)))) {
  	lineNumberReader.skip(Long.MAX_VALUE);
  	noOfLines = lineNumberReader.getLineNumber() + 1;
}

4.总结

在这个简短的Java教程中,我们学会了用Java查找文件中的总行数。我们看到了有效的解决方案,即Stream和LineNumberReader,也看到了糟糕的解决方案,如将整个文件读入List

我们建议尝试每个解决方案进行性能比较,以找到符合你要求的最佳解决方案

学习愉快!!