From b915d0aed50c37c22e0b95032f02ce8500db3f79 Mon Sep 17 00:00:00 2001 From: CalDescent Date: Mon, 21 Jun 2021 08:40:52 +0100 Subject: [PATCH] Only create the output file directories when we are actually writing a file there. This should prevent empty directories being created when initializing a nonexistent DataFile using a hash. --- src/main/java/org/qortal/storage/DataFile.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/qortal/storage/DataFile.java b/src/main/java/org/qortal/storage/DataFile.java index 9e446966..160af290 100644 --- a/src/main/java/org/qortal/storage/DataFile.java +++ b/src/main/java/org/qortal/storage/DataFile.java @@ -80,7 +80,7 @@ public class DataFile { String base58Digest = Base58.encode(Crypto.digest(fileContent)); LOGGER.debug(String.format("File digest: %s, size: %d bytes", base58Digest, fileContent.length)); - String outputFilePath = this.getOutputFilePath(base58Digest); + String outputFilePath = this.getOutputFilePath(base58Digest, true); File outputFile = new File(outputFilePath); try (FileOutputStream outputStream = new FileOutputStream(outputFile)) { outputStream.write(fileContent); @@ -97,7 +97,7 @@ public class DataFile { } public static DataFile fromBase58Digest(String base58Digest) { - String filePath = DataFile.getOutputFilePath(base58Digest); + String filePath = DataFile.getOutputFilePath(base58Digest, false); return new DataFile(filePath); } @@ -119,7 +119,7 @@ public class DataFile { } private String copyToDataDirectory() { - String outputFilePath = this.getOutputFilePath(this.base58Digest()); + String outputFilePath = this.getOutputFilePath(this.base58Digest(), true); Path source = Paths.get(this.filePath).toAbsolutePath(); Path dest = Paths.get(outputFilePath).toAbsolutePath(); try { @@ -130,16 +130,18 @@ public class DataFile { } } - public static String getOutputFilePath(String base58Digest) { + public static String getOutputFilePath(String base58Digest, boolean createDirectories) { String base58DigestFirst2Chars = base58Digest.substring(0, Math.min(base58Digest.length(), 2)); String base58DigestNext2Chars = base58Digest.substring(2, Math.min(base58Digest.length(), 4)); String outputDirectory = String.format("%s/%s/%s", Settings.getInstance().getDataPath(), base58DigestFirst2Chars, base58DigestNext2Chars); Path outputDirectoryPath = Paths.get(outputDirectory); - try { - Files.createDirectories(outputDirectoryPath); - } catch (IOException e) { - throw new IllegalStateException("Unable to create data subdirectory"); + if (createDirectories) { + try { + Files.createDirectories(outputDirectoryPath); + } catch (IOException e) { + throw new IllegalStateException("Unable to create data subdirectory"); + } } return String.format("%s/%s", outputDirectory, base58Digest); }