Utility { public static void ensureDirectory(Path path) { if (path == null) { throw new IllegalArgumentException("Empty path"); } File directory = path.toFile(); directory.mkdirs(); if (!directory.exists()) { throw new IllegalStateException("Unable to create directory " + directory.getAbsolutePath()); } if (!directory.isDirectory()) { throw new IllegalStateException("Not a directory " + directory.getAbsolutePath()); } if (!directory.canRead() || !directory.canWrite()) { throw new IllegalStateException("Insufficient permissions for directory " + directory.getAbsolutePath()); } }  static Pair<byte[], byte[]> extractHashAndSigFromFile(File file); static String getBalanceFileHash(String fileName); static RecordFile parseRecordFile(String filePath, Consumer<RecordItem> recordItemConsumer); static int readInt(DataInputStream dis, MessageDigest md); static byte[] readBytes(DataInputStream dis, int len, MessageDigest md); static Timestamp instantToTimestamp(Instant instant); static String accountIDToString(AccountID accountID); static Instant convertToInstant(Timestamp timestamp); static String printProtoMessage(GeneratedMessageV3 message); static String bytesToHex(byte[] bytes); static Long convertToNanos(long second, long nanos); static Long convertToNanosMax(long second, long nanos); static Long timeStampInNanos(Timestamp timestamp); static Long timestampInNanosMax(Timestamp timestamp); static boolean hashIsEmpty(String hash); static void archiveFile(File source, Path destinationRoot); static void purgeDirectory(Path path); static void ensureDirectory(Path path); static File getResource(String path); static final Instant getInstantFromFilename(String filename); static final long getTimestampFromFilename(String filename); static final String getStreamFilenameFromInstant(StreamType streamType, Instant instant); static final boolean isStreamFileAfterInstant(String filename, Instant instant); static @Nullable String protobufKeyToHexIfEd25519OrNull(@Nullable byte[] protobufKey); static TransactionID getTransactionId(AccountID payerAccountId); static boolean verifyHashChain(
            String actualPrevFileHash, String expectedPrevFileHash, Instant verifyHashAfter, String fileName); static final Instant MAX_INSTANT_LONG; }
@Test void ensureDirectory() throws Exception { Path directory = tempDir.resolve("created"); Path file = tempDir.resolve("file"); Utility.ensureDirectory(directory); Utility.ensureDirectory(directory); file.toFile().createNewFile(); assertThatThrownBy(() -> Utility.ensureDirectory(file)).isInstanceOf(IllegalStateException.class); assertThatThrownBy(() -> Utility.ensureDirectory(null)).isInstanceOf(IllegalArgumentException.class); }