流已作或关闭,在尝试创建赛车手时获得异常



我有以下类:

public List<Racer> createListOfRacers() throws IOException {
Stream<String> abbreviationsOfRacers = fileLoader.createStreamFromFile("src/main/resources/abbreviations.txt");
Stream<Racer> racerList = abbreviationsOfRacers
.map(this::createRacer);
return racerList.collect(toList());
}

在此行中抛出异常:

.map(this::createRacer);

创建由同一类组成的赛车手的方法:

private Racer createRacer(String line) {
return new Racer(extractAbbreviationOfTheRacer(line), extractNameOfTheRacer(line), extractTeamOfTheRacer(line));
}
private String extractNameOfTheRacer(String line) {
return line.substring(line.indexOf('_') + 1, line.lastIndexOf('_'));
}
private String extractTeamOfTheRacer(String line) {
return line.substring(line.lastIndexOf('_') + 1);
}
private String extractAbbreviationOfTheRacer(String line) {
return line.substring(0, line.indexOf('_'));
}

赛车手类 :

public class Racer {
private String abbrevition;
private String name;
private String team;
private String result;

public Racer(String abbrevition, String name, String team) {
this.abbrevition = abbrevition;
this.name = name;
this.team = team;
}
public Racer() {
}

缩写.txt文件 :

DRR_Daniel Ricciardo_RED BULL RACING TAG HEUER
SVF_Sebastian Vettel_FERRARI
LHM_Lewis Hamilton_MERCEDES
KRF_Kimi Raikkonen_FERRARI ...

文件加载器类:

public Stream<String> createStreamFromFile(String file) throws IOException {
try (Stream<String> streamFromFile = Files.lines(Paths.get(file))) {
return streamFromFile;
}
}

我读过有关流供应商的信息,但我无法弄清楚,因此我将不胜感激如何修复我的程序的任何帮助。

您正在使用 try-with-resources 语句来创建流。因此,当方法返回时,流将被关闭,这违背了您的目的。

来自上述资源(强调我的(

"使用资源尝试"语句是声明一个或多个资源的 try 语句。资源是在程序完成使用后必须关闭的对象。"使用资源试用"语句可确保在语句末尾关闭每个资源。任何实现java.lang.AutoCloseable的对象(包括实现java.io.Closeable的所有对象(都可以用作资源。

Stream扩展BaseStream扩展AutoCloseable


更改代码以返回流,例如

public Stream<String> createStreamFromFile(String file) throws IOException {
return Files.lines(Paths.get(file));
}

最新更新