我正在阅读一个大文件:
try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
stream.skip(1).forEach(Main::parseLine);
} catch (IOException e) {
e.printStackTrace();
}
其中解析行如下所示:
private static void parseLine(String line) {
System.out.println(line);
}
我想要做的是跟踪我正在阅读的当前行,并parseLine
看起来像这样:
private static void parseLine(String line, int idx) {
System.out.println(line);
}
我该怎么做?
答案 0 :(得分:3)
将行收集到列表中,然后使用String address = s.nextLine();
address = s.nextLine();
或显式IntStream.range
循环调用您的方法将元素与索引一起传递:
for
另一种选择是使用LineNumberReader API。
答案 1 :(得分:2)
您可以使用自定义Consumer实现,它使用计数器变量跟踪索引:
stream.skip(1).forEach(new Consumer<String>(){
private final long counter = 0L;
@Override
public void accept(String line){
parseLine(line, counter++);
}
});