Zmienna środowiskowa do sterowania java. io. tmpdir?

Użyłem zmiennej środowiskowej TMP do kontrolowania takich rzeczy, jak miejsce, w którym gcc zapisuje pliki tymczasowe, ale nie mogę znaleźć odpowiednika dla API createTempFile w Javie.

Czy taka zmienna środowiskowa istnieje?

Author: Paul Sweatte, 2009-12-17

7 answers

Hmmm -- ponieważ jest to obsługiwane przez JVM, zagłębiłem się trochę w kod źródłowy VM OpenJDK, myśląc, że może to, co robi OpenJDK naśladuje to, co robi Java 6 i wcześniejsze. To nie jest pocieszające, że jest sposób, aby to zrobić inaczej niż na Windows.

W systemie Windows funkcja openjdk get_temp_directory() wywołuje API Win32 do GetTempPath(); w ten sposób w systemie Windows Java odzwierciedla wartość zmiennej środowiskowej TMP.

Na Linuksie i Solarisie , tym samym get_temp_directory() funkcje zwracają wartość statyczną /tmp/.

Nie wiem, czy rzeczywisty JDK6 jest zgodny z tymi konwencjami, ale po zachowaniu na każdej z wymienionych platform, wydaje się, że tak.

 105
Author: delfuego,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-04 18:48:26

Zgodnie z java.io.File Java Docs

Domyślny katalog plików tymczasowych jest określony przez właściwość systemową java. io. tmpdir. w systemach uniksowych domyślną wartością tej właściwości jest zazwyczaj "/ tmp " lub "/ var / tmp"; w systemach Microsoft Windows jest to zazwyczaj "c:\temp". Podczas wywoływania Wirtualnej Maszyny Java można nadać inną wartość tej właściwości systemowej, ale nie gwarantuje się, że zmiany programowe tej właściwości będą miały jakikolwiek wpływ na katalog tymczasowy używany przez tę metodę.

Aby określić właściwość systemową java.io.tmpdir, możesz wywołać JVM w następujący sposób:

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

Domyślnie wartość ta powinna pochodzić ze zmiennej środowiskowej TMP w systemach Windows

 91
Author: Bryan Kyle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-22 19:37:21

Możesz ustawić swoją zmienną środowiskową. Na przykład w bash to by zadziałało:

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

Umieściłem to w moim skrypcie logowania bash i wydaje się, że działa.

 51
Author: John St. John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-04 18:46:19

Użyj

$ java -XshowSettings
Property settings:
    java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
    java.io.tmpdir = /tmp
 33
Author: Nisar Ahmed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-04 19:11:39

Nie jest zmienną środowiskową, ale nadal daje Ci kontrolę nad katalogiem temp:

-Djava.io.tmpdir

Ex.:

java -Djava.io.tmpdir=/mytempdir
 24
Author: Bozho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-04 18:48:35

Żeby było jasne co tu się dzieje:

  • Zalecanym sposobem ustawienia tymczasowej lokalizacji katalogu jest ustawienie właściwości systemowej o nazwie "java. io. tmpdir", np. poprzez podanie opcji -Djava.io.tmpdir=/mytempdir poleceniu java. Właściwość można również zmienić z poziomu programu przez wywołanie System.setProperty("java.io.tmpdir", "/mytempdir)... modulo Sandbox problemy z bezpieczeństwem.

  • Jeśli nie ustawisz jawnie właściwości "java.io.tmpdir" podczas uruchamiania, JVM zainicjalizuje ją do specyficznej dla platformy wartość domyślna. W systemie Windows wartość domyślna jest uzyskiwana przez wywołanie metody API Win32. Dla Linuksa / Solarisa domyślne jest najwyraźniej podłączone do sieci. Dla innych JVMs może to być coś innego.

Empirycznie, zmienna środowiskowa " TMP " działa na Windows (z bieżącym JVMs), ale nie na innych platformach. Jeśli zależy ci na przenośności, powinieneś jawnie ustawić właściwość systemową.

 13
Author: Stephen C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-18 07:54:38

Użyj poniższego polecenia na terminalu uniksowym:

java -XshowSettings

Wyświetli wszystkie właściwości Javy i ustawienia systemowe. W tym look for java.io.tmpdir value.

 -2
Author: suhas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-20 04:24:42