从java中的文件中读取多行以形成特定行号
如果我有一个包含10000行整数的文件,我想从第100行读取到第900行并将它们相加,那么如何在java中实现呢?使用streams很简单。这将把从从java中的文件中读取多行以形成特定行号,java,file-io,Java,File Io,如果我有一个包含10000行整数的文件,我想从第100行读取到第900行并将它们相加,那么如何在java中实现呢?使用streams很简单。这将把从开始到结束的所有数字相加 String fileName = "some file name"; int start = 100; int end = 900; try { long sum = Files.lines(Path.of(fileName)) // skip the first start - 1 li
开始
到结束
的所有数字相加
String fileName = "some file name";
int start = 100;
int end = 900;
try {
long sum = Files.lines(Path.of(fileName))
// skip the first start - 1 lines
.skip(start-1)
// now allow the next lines up to and including
// the original end number.
.limit(end-start+1)
// covert to an int for summing
.mapToLong(Long::parseLong)
// sum them
.sum();
System.out.print(sum);
} catch (Exception e) {
e.printStackTrace();
}
如果您不想使用流,这里有一个基于循环的版本。我在print语句中留下,以显示哪些行被跳过,哪些行被求和
String fileName = "some file name";
int start = 100;
int end = 1000;
long sum = 0;
try (BufferedReader fr = new BufferedReader(new FileReader(fileName))) {
while (--start > 0) {
end--; // update number to finally read.
// skip first start - 1 lines
String line = fr.readLine();
System.out.println("Skipping " + line);
}
while (end-- > 0) {
String line = fr.readLine().trim();
System.out.println("Summing " + line);
sum += Long.valueOf(line);
}
} catch(Exception e) {
e.printStackTrace();
}
System.out.println(sum);
可以这样做:
int fromLine = 100;
int toLine = 900;
int result = Files.lines(Path.of("numfile.dat"))
.skip(fromLine - 1).limit(toLine - fromLine)
.mapToInt(Integer::parseInt).sum();