Я думаю, что нашел хороший способ сделать это. Flowable.using()
позволяет создать Flowable с некоторым «базовым» ресурсом. Если Files.walk()
завершается неудачно с IOException
, вызывается onError
подписчика, и после завершения «ресурс» закрывается (в данном случае java.util.stream.Stream
с путями).
import io.reactivex.Flowable;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.stream.Stream;
final Flowable<Path> pathFlowable = Flowable.using(
() -> Files.walk(Path.of("/nofile")),
stream -> Flowable.fromIterable(stream::iterator),
Stream::close
);
pathFlowable.subscribe(System.out::println, t -> System.out.println("Error " + t.toString()));