Переменная окружения для управления java.io.tmpdir? - PullRequest
93 голосов
/ 17 декабря 2009

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

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

Ответы [ 7 ]

107 голосов
/ 18 декабря 2009

Хммм - поскольку это обрабатывается JVM, я немного углубился в исходный код виртуальной машины OpenJDK, думая, что, возможно, то, что сделано OpenJDK, имитирует то, что было сделано в Java 6 и ранее. Это не обнадеживает, что есть способ сделать это, кроме как в Windows.

В Windows , функция OpenJDK get_temp_directory() делает вызов Win32 API для GetTempPath(); Вот как в Windows Java отражает значение переменной окружения TMP.

В Linux и Solaris , те же самые функции get_temp_directory() возвращают статическое значение /tmp/.

Я не знаю, соответствует ли настоящий JDK6 этим точным соглашениям, но по поведению на каждой из перечисленных платформ кажется, что они это делают.

96 голосов
/ 17 декабря 2009

Согласно java.io.File Документам Java

Каталог временных файлов по умолчанию указывается системным свойством java.io.tmpdir. В системах UNIX значением этого свойства по умолчанию обычно является "/ tmp" или "/ var / tmp"; в системах Microsoft Windows это обычно "c: \ temp". При вызове виртуальной машины Java может быть задано другое значение, но программные изменения этого свойства не гарантируют никакого влияния на временный каталог, используемый этим методом.

Чтобы указать системное свойство java.io.tmpdir, вы можете вызвать JVM следующим образом:

java -Djava.io.tmpdir=/path/to/tmpdir

По умолчанию это значение должно исходить из переменной среды TMP в системах Windows

55 голосов
/ 03 апреля 2011

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

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

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

34 голосов
/ 07 августа 2013

Использование

$ java -XshowSettings
Property settings:
    java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
    java.io.tmpdir = /tmp
26 голосов
/ 17 декабря 2009

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

-Djava.io.tmpdir

например:.

java -Djava.io.tmpdir=/mytempdir
15 голосов
/ 18 декабря 2009

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

  • Рекомендованным способом установки местоположения временного каталога является установка системного свойства с именем "java.io.tmpdir", например, предоставив опцию -Djava.io.tmpdir=/mytempdir команде java. Свойство также можно изменить изнутри программы, вызвав System.setProperty("java.io.tmpdir", "/mytempdir) ... проблемы безопасности с песочницей по модулю.

  • Если вы не указали явное свойство "java.io.tmpdir" при запуске, JVM инициализирует его значением для платформы по умолчанию. Для Windows значение по умолчанию получается путем вызова метода Win32 API. Для Linux / Solaris значение по умолчанию, по-видимому, жесткое. Для других JVM это может быть что-то еще.

Опытным путем переменная среды "TMP" работает в Windows (с текущими JVM), но не на других платформах. Если вы заботитесь о переносимости, вам следует явно установить системное свойство.

0 голосов
/ 20 июня 2018

Используйте приведенную ниже команду для терминала UNIX:

java -XshowSettings

Это отобразит все свойства Java и системные настройки. В этом поиске значение java.io.tmpdir.

...