我是Java的新手。我想在测试文件中找到行数,以便我可以将它用于数组大小。 我最初的想法是创建一个循环并更新一个int变量。像这样:
Scanner file = new Scanner(new File("data.text"));
int n = 0;
while(file.hasNextLine()) {
file.nextLine();
n++;
}
int[] array = new int[n];
这对我不起作用,因为扫描仪文件位于文本文件的末尾。 除非我关闭原始文件并创建一个新的扫描仪对象,否则我将无法读取文本文件。有更好的方法来执行此操作吗?
答案 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)
您可以使用BufferedReader
和FileReader
:
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对象从头开始再次读取文件而不关闭它。
不可能这样做。。
原因:它支持的各种输入类型。传递后不会存储结果,因此他们不支持重置。
因此,优雅的解决方案是创建一个新的扫描仪对象。