Я использовал переменную среды TMP
для управления такими вещами, как то, где gcc записывает временные файлы, но я не могу найти эквивалент для java createTempFile API.
Существует ли такая переменная окружения?
Я использовал переменную среды TMP
для управления такими вещами, как то, где gcc записывает временные файлы, но я не могу найти эквивалент для java createTempFile API.
Существует ли такая переменная окружения?
Хммм - поскольку это обрабатывается JVM, я немного углубился в исходный код OpenJDK VM, думая, что, возможно, то, что сделано OpenJDK, имитирует то, что сделано в Java 6 и более ранних версиях. То, что это можно сделать, кроме Windows, не обнадеживает.
В Windows, функция get_temp_directory()
OpenJDK выполняет вызов Win32 API для GetTempPath()
; так в Windows Java отражает значение переменной среды TMP
.
В Linux и Solaris те же get_temp_directory()
функции возвращают статическое значение /tmp/
.
Я не знаю, следует ли фактический JDK6 этим точным соглашениям, но, судя по поведению на каждой из перечисленных платформ, похоже, что они соблюдают.
-Djava.io.tmpdir
для JVM), и если это значение по умолчанию будет затронуто совсем не по ценности окружающей среды. Как люди заметили, в Windows на нее влияет переменная среды TMP
, но было неясно, существует ли какая-то неизвестная переменная для других ОС. Похоже, что нет, по крайней мере, с учетом того, что мы знаем об OpenJDK.
- person delfuego; 18.12.2009
GetTempPath()
зависит не только от переменной среды TMP
: msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx
- person Dan Berindei; 29.05.2012
/var/tmp/
(с ведущей косой чертой), есть даже ошибка № 4391434 для этого. И для Mac OS и Linux это /tmp
- что за беспорядок !
- person dma_k; 30.05.2012
oracle-java8-jdk=8u102
(linux)
- person Alex; 02.09.2016
/tmp
при написании небольшой тестовой программы, которая просто распечатывает свойство, но по какой-то причине createTempDir
Google из здесь, получив это свойство так же, как и я, предлагает var/tmp
, без ведущей косой черты. Я определил это, запустив Druid под strace и просмотрев все обращения к mkdir
.
- person Throw Away Account; 06.04.2017
Согласно java.io.File
Java Docs
Каталог временных файлов по умолчанию определяется системным свойством 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.
java.io.tmpdir
определяется с помощью функции Windows SDK GetTempPath
(msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx), который будет преобразован в TMP, TEMP, USERPROFILE или каталог Windows, если каждый из предыдущих не определен.
- person Pascal Thivent; 18.12.2009
Вы можете установить свою _JAVA_OPTIONS
переменную окружения. Например, в bash это поможет:
export _JAVA_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir
Я вставил это в свой сценарий входа в bash, и, похоже, это помогло.
Picked up _JAVA_OPTIONS:
Это полностью сбивает с толку наш процесс сборки.
- person marc.guenther; 20.10.2011
JAVA_TOOL_OPTIONS
более портативен.
- person EndlosSchleife; 06.03.2019
Использовать
$ java -XshowSettings
Property settings:
java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
java.io.tmpdir = /tmp
Это не переменная среды, но все же дает вам контроль над временным каталогом:
-Djava.io.tmpdir
ex.:
java -Djava.io.tmpdir=/mytempdir
Чтобы понять, что здесь происходит:
Рекомендуемый способ установить местоположение временного каталога - установить системное свойство под названием "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), но не на других платформах. Если вы заботитесь о переносимости, вы должны явно установить системное свойство.
Используйте следующую команду на терминале UNIX:
java -XshowSettings
Это отобразит все свойства java и системные настройки. Здесь ищите значение java.io.tmpdir
.
Если вы посмотрите исходный код JDK, вы увидите, что для систем unix свойство читается по адресу время компиляции из paths.h или жестко запрограммирован. Для окон функция GetTempPathW
из win32 возвращает имя tmpdir
.
Для систем posix вы можете ожидать, что стандарт TMPDIR
будет работать, но это это не так. Вы можете подтвердить, что TMPDIR
не используется, запустив TMPDIR=/mytmp java -XshowSettings
мы можем изменить местоположение загрузки файла tomcat по умолчанию, как
мы должны установить переменную окружения, например: CATALINA_TEMPDIR = ВАШ ФАЙЛ ЗАГРУЗИТЬ МЕСТО. это местоположение изменит путь здесь: java -Djava.io.tmpdir = / path / to / tmpdir