Я использовал переменную среды TMP
для управления такими вещами, как gcc, которые записывают временные файлы, но я не могу найти эквивалент для java createTempFile API.
Существует ли такая переменная среды?
Я использовал переменную среды TMP
для управления такими вещами, как gcc, которые записывают временные файлы, но я не могу найти эквивалент для java createTempFile API.
Существует ли такая переменная среды?
Hmmm - так как это обрабатывается JVM, я немного углубился в исходный код OpenJDK VM, думая, что, возможно, что сделано OpenJDK, имитирует то, что сделано на Java 6 и ранее. Не уверен, что есть способ сделать это иначе, чем в Windows.
В Windows функция OpenJDK get_temp_directory()
делает вызов API Win32 на GetTempPath()
; это как в Windows, Java отражает значение переменной среды TMP
.
В Linux и Solaris, те же функции get_temp_directory()
возвращают статическое значение /tmp/
.
Я не знаю, соответствуют ли фактические JDK6 этим точным соглашениям, но поведению на каждой из перечисленных платформ кажется, что они делают.
Согласно java.io.File
Java Docs
Каталог временных файлов по умолчанию задается системным свойством java.io.tmpdir. В системах UNIX значение по умолчанию этого свойства обычно равно "/tmp" или "/var/tmp"; в системах Microsoft Windows обычно это "c:\temp". Другое значение может быть присвоено этому системному свойству при вызове виртуальной машины Java, но программные изменения этого свойства не гарантируют никакого влияния на временный каталог, используемый этим методом.
Чтобы указать свойство java.io.tmpdir
System, вы можете вызвать JVM следующим образом:
java -Djava.io.tmpdir=/path/to/tmpdir
По умолчанию это значение должно поступать из переменной среды TMP
в системах Windows
Вы можете установить переменную окружения _JAVA_OPTIONS
. Например, в bash это сделало бы трюк:
export _JAVA_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir
Я поместил это в мой bash login script и, похоже, сделал трюк.
Используйте
$ java -XshowSettings
Property settings:
java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
java.io.tmpdir = /tmp
Это не переменная окружения, но все же дает вам контроль над временным dir:
-Djava.io.tmpdir
например:.
java -Djava.io.tmpdir=/mytempdir
Чтобы понять, что происходит здесь:
Рекомендуемый способ установки временного расположения каталога - установить свойство System, называемое "java.io.tmpdir", например. задав опцию -Djava.io.tmpdir=/mytempdir
команде java
. Свойство также можно изменить изнутри программы, вызвав проблемы System.setProperty("java.io.tmpdir", "/mytempdir)
... modulo sandbox.
Если вы не устанавливаете свойство java.io.tmpdir явно при запуске, JVM инициализирует его значением по умолчанию для платформы. Для Windows по умолчанию получается вызов метода Win32 API. Для Linux/Solaris по умолчанию явно жестко. Для других JVM это может быть что-то еще.
Эмпирически переменная среды "TMP" работает в Windows (с текущими JVM), но не на других платформах. Если вы заботитесь о переносимости, вы должны явно указать системное свойство.