diff --git a/io/src/main/java/uk/ac/ox/poseidon/io/CsvParserUtils.java b/io/src/main/java/uk/ac/ox/poseidon/io/CsvParserUtils.java index 01c86f264..3d529979b 100644 --- a/io/src/main/java/uk/ac/ox/poseidon/io/CsvParserUtils.java +++ b/io/src/main/java/uk/ac/ox/poseidon/io/CsvParserUtils.java @@ -37,13 +37,11 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; -import java.util.Collection; -import java.util.List; -import java.util.Spliterator; -import java.util.Spliterators; +import java.util.*; import java.util.stream.Stream; import java.util.stream.StreamSupport; +import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.collect.ImmutableList.toImmutableList; import static java.nio.charset.StandardCharsets.UTF_8; @@ -160,8 +158,7 @@ public static > void writeRows( final Collection headers, final Iterable rows ) { - // noinspection ResultOfMethodCallIgnored - outputFile.getParent().toFile().mkdirs(); + createOutputFolderIfNeeded(outputFile); try (final OutputStream outputstream = Files.newOutputStream(outputFile)) { final CsvWriterSettings csvWriterSettings = new CsvWriterSettings(); final CsvWriter csvWriter = new CsvWriter(outputstream, csvWriterSettings); @@ -171,4 +168,17 @@ public static > void writeRows( throw new RuntimeException(e); } } + + private static void createOutputFolderIfNeeded(final Path outputFile) { + Optional + .ofNullable(checkNotNull(outputFile).toAbsolutePath().getParent()) + .map(Path::toFile) + .filter(parentFolder -> !parentFolder.exists()) + .ifPresent(parentFolder -> { + final boolean created = parentFolder.mkdirs(); + if (!created) { + throw new RuntimeException("Failed to create output folder: " + parentFolder); + } + }); + } }