Это то, что я делаю, чтобы предотвратить закрытие BufferedReader
, когда lines()
заканчивается в try-with-resources
:
Это общая утилита, и она работает со многими устройствами чтения, а не только с файлами.
public static List<String> getLines(Reader reader, boolean trim, boolean closeReader) throws IOException {
Objects.requireNonNull(reader);
BufferedReader br = new BufferedReader(reader) {
@Override
public void close() throws IOException {
if (closeReader) {
super.close();
}
}
};
try (Stream<String> lines = br.lines()) {
return lines.map(it -> trim ? it.trim() : it)
.collect(Collectors.toList());
}
}
Есть ли лучший способ управления, чтобы закрытие Stream<String>
не закрывало также Bufferedreader
?
Согласно комментариям ниже, чтобы попробовать обычный try
, это будет выглядеть так:
public static List<String> getLines(Reader reader, boolean trim, boolean closeReader) throws IOException {
Objects.requireNonNull(reader);
BufferedReader br = new BufferedReader(reader);
try {
return br.lines()
.map(it -> trim ? it.trim() : it)
.collect(Collectors.toList());
} finally {
if (closeReader) {
br.close();
}
}
}
Так лучше :)