Subscribe неоднократно вызывает iterator (), но DirectoryStream имеет проверку, чтобы убедиться, что итератор должен быть нулевым, прежде чем назначить его собственный
@Override
public Iterator<Path> iterator() {
if (!isOpen) {
throw new IllegalStateException("Directory stream is closed");
}
synchronized (this) {
if (iterator != null)
throw new IllegalStateException("Iterator already obtained");
iterator = new WindowsDirectoryIterator(firstName);
return iterator;
}
}
Хотя, если вы используете Java 8+, есть 0 причин использовать newDirectoryStream(dir)
, так как вы можете использовать list(dir)
для обеспечения фактического потока
Следующее должно работать
Path myDir = Paths.get("C:\\Users\\r.dacanal\\Documents\\Reply\\EDA\\logging-consumer\\input");
Stream<Path> directoryStream = Files.list(myDir);
Flux.fromStream(directoryStream).doOnNext(System.out::println).subscribe();