Прочитать текстовый файл построчно с реактором - PullRequest
0 голосов
/ 06 августа 2020

Я хочу прочитать файл с помощью Flux. В основном то, что я пытаюсь сделать, - это преобразовать текстовый файл внутри моей Spring-boot jar в Flux<String>

@SneakyThrows
@Override
public Flux<String> getLines() {
    final InputStream inputStream = new ClassPathResource(pathToFile).getInputStream();
    final InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
    final BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

    return Flux.using(
        bufferedReader::lines,
        Flux::fromStream,
        stringStream -> {
            close(inputStreamReader);
            close(bufferedReader);
            stringStream.close();
        }
    );
}

private void close(final Closeable closeable) {
    try {
        closeable.close();
    } catch (final IOException e) {
        throw new RuntimeException(e);
    }
}

. Я не уверен, правильно ли я делаю это, и как это улучшить (однако это работает правильно)

EDIT : я изменил его на:

return Flux.using(
    () -> new ClassPathResource(pathToFile).getInputStream(),
    is -> Flux.using(
        () -> new InputStreamReader(is),
        isr -> Flux.using(
            () -> new BufferedReader(isr),
            br -> Flux.using(
                br::lines,
                Flux::fromStream,
                BaseStream::close
            ),
            this::close
        ),
        this::close
    ),
    this::close
)
...