diff --git a/code/src/main/java/com/codeforces/commons/io/internal/UnsafeFileUtil.java b/code/src/main/java/com/codeforces/commons/io/internal/UnsafeFileUtil.java index 79d050f2..acabd29a 100644 --- a/code/src/main/java/com/codeforces/commons/io/internal/UnsafeFileUtil.java +++ b/code/src/main/java/com/codeforces/commons/io/internal/UnsafeFileUtil.java @@ -899,9 +899,15 @@ private static class TempDirHolder { private static String initializeTempDir() { try { + String tempDirParent = CommonsPropertiesUtil.getApplicationTempDirParent(); + if (tempDirParent != null) { + ensureDirectoryExists(new File(tempDirParent)); + } + String tempDirName = CommonsPropertiesUtil.getApplicationTempDirName(); - File dir = File.createTempFile(tempDirName, ""); + File dir = File.createTempFile(tempDirName, "", + tempDirParent == null ? null : new File(tempDirParent)); File temp = new File(dir.getParentFile(), tempDirName); if (!dir.delete()) { diff --git a/code/src/main/java/com/codeforces/commons/properties/internal/CommonsPropertiesUtil.java b/code/src/main/java/com/codeforces/commons/properties/internal/CommonsPropertiesUtil.java index ab1c45e1..3db1942c 100644 --- a/code/src/main/java/com/codeforces/commons/properties/internal/CommonsPropertiesUtil.java +++ b/code/src/main/java/com/codeforces/commons/properties/internal/CommonsPropertiesUtil.java @@ -1,9 +1,13 @@ package com.codeforces.commons.properties.internal; import com.codeforces.commons.properties.PropertiesUtil; +import com.codeforces.commons.text.StringUtil; +import java.io.File; import java.util.List; +import javax.annotation.Nullable; + /** * @author Mike Mirzayanov * @author Maxim Shipko (sladethe@gmail.com) @@ -30,6 +34,11 @@ public static String getApplicationTempDirName() { return PropertyValuesHolder.TEMP_DIR_NAME; } + @Nullable + public static String getApplicationTempDirParent() { + return PropertyValuesHolder.TEMP_DIR_PARENT; + } + public static List getSecurePasswords() { return PropertyValuesHolder.SECURE_PASSWORDS; } @@ -52,6 +61,8 @@ public static String getSubscriptionToken() { private static final class PropertyValuesHolder { private static final String TEMP_DIR_NAME = getProperty("temp-dir.name", "temp"); + @Nullable + private static final String TEMP_DIR_PARENT = StringUtil.trimToNull(getProperty("temp-dir.parent", null)); private static final List SECURE_PASSWORDS = getListProperty("security.secure-passwords", ""); private static final List SECURE_HOSTS = getListProperty("security.secure-hosts", ""); private static final boolean BYPASS_CERTIFICATE_CHECK