从java中的文件中读取多行以形成特定行号

从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

如果我有一个包含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 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();