Переменная среды для управления java.io.tmpdir?

Я использовал переменную среды TMP для управления такими вещами, как gcc, которые записывают временные файлы, но я не могу найти эквивалент для java createTempFile API.

Существует ли такая переменная среды?

Ответ 1

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 этим точным соглашениям, но поведению на каждой из перечисленных платформ кажется, что они делают.

Ответ 2

Согласно 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

Ответ 3

Вы можете установить переменную окружения _JAVA_OPTIONS. Например, в bash это сделало бы трюк:

export _JAVA_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir

Я поместил это в мой bash login script и, похоже, сделал трюк.

Ответ 4

Используйте

$ java -XshowSettings
Property settings:
    java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
    java.io.tmpdir = /tmp

Ответ 5

Это не переменная окружения, но все же дает вам контроль над временным dir:

-Djava.io.tmpdir

например:.

java -Djava.io.tmpdir=/mytempdir

Ответ 6

Чтобы понять, что происходит здесь:

  • Рекомендуемый способ установки временного расположения каталога - установить свойство 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), но не на других платформах. Если вы заботитесь о переносимости, вы должны явно указать системное свойство.