如何从java中的文本文件中获取行数?

时间:2016-12-28 16:38:50

标签: java arrays file java.util.scanner

我是Java的新手。我想在测试文件中找到行数,以便我可以将它用于数组大小。 我最初的想法是创建一个循环并更新一个int变量。像这样:

Scanner file  = new Scanner(new File("data.text"));
int n = 0;
while(file.hasNextLine()) {
    file.nextLine();
    n++;
 }
int[] array = new int[n];

这对我不起作用,因为扫描仪文件位于文本文件的末尾。 除非我关闭原始文件并创建一个新的扫描仪对象,否则我将无法读取文本文件。有更好的方法来执行此操作吗?

4 个答案:

答案 0 :(得分:3)

如果你使用1.7+,你可以直接存储到这样的数组。

import java.io.File;

import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;

import java.util.List;

// more code

Path filePath = new File("fileName").toPath();
Charset charset = Charset.defaultCharset();        
List<String> stringList = Files.readAllLines(filePath, charset);
String[] stringArray = stringList.toArray(new String[]{});

答案 1 :(得分:1)

根据您需要做什么,您可能希望将整个文件保留在内存中。

List<String> lines = Files.readAllLines(Paths.get("data.text"));
// Here you can easily obtain the list size
lines.size()

如果您不需要实际行或不需要所有行,您可以执行类似这样的操作

long lineCount = Files.lines(Paths.get("data.text")).count();

由于它是Java 8 Stream,您可以使用行过滤,解析或执行任何操作。

答案 2 :(得分:0)

您可以使用BufferedReaderFileReader

FileReader in = new FileReader("data.txt");
BufferedReader br = new BufferedReader(in);// use this only if you have large files, meaning that each line is very long.
int n = 0;
while (br.readLine() != null) {
    n++;

}
System.out.println(n);
in.close();
int[] array = new int[n];

此外,您可以使用ArrayList而不是数组,但这取决于您希望如何使用行数。

如果您的文件不是很大,您可以这样做:

FileReader in = new FileReader("data.txt");
int n = 0;
while ((in.readLine() != null)) {
    n++;

}
System.out.println(n);
in.close();
int[] array = new int[n];

答案 3 :(得分:0)

好。以下是您问题的简单答案。 您希望使用相同的Scanner对象从头开始再次读取文件而不关闭它。
不可能这样做。


原因:它支持的各种输入类型。传递后不会存储结果,因此他们不支持重置。
因此,优雅的解决方案是创建一个新的扫描仪对象。