Действительно ли Files.createDirectory() неблокирует?

Я создал такой метод:

Flux<GetObjectResponse> download(String bucket, List<String> s3FileNames) {
    String tmpDirName = UUID.randomUUID().toString();
    Path dir = Paths.get(tmpDirName);
    if (!Files.exists(dir)) {
        try {
            Files.createDirectory(dir);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    return Flux.fromIterable(s3FileNames)
            .flatMap(filename -> Mono.just(GetObjectRequest.builder().bucket(bucket).key(filename).build()))
            .flatMap(getObjectRequest -> Mono.fromFuture(s3AsyncClient.getObject(getObjectRequest, Paths.get(tmpDirName, getObjectRequest.key()))));
}

Позже я обрабатываю этот реактивный поток, но IntelliJ дает мне подсказку, когда я звоню Files.createDirectory(dir):

Inappropriate blocking method call less... (Ctrl+1) 
Inspection info: Reports thread-blocking method calls found in a code fragment where a thread should not be blocked

Прав ли IntelliJ? Блокируется ли NIO при взаимодействии с файлами?

1 ответ

Решение

Все файловые операции до NIO2 являются синхронными, и вы можете предположить, что операция завершена к моменту возврата метода. Только TCP-сокеты и средство просмотра файлов выполняли асинхронные операции.

NIO2 добавил AsynchronousFileChannel, однако это не относится к каталогам.

Другие вопросы по тегам