variabile d'ambiente per controllare java.io.tmpdir?
-
20-09-2019 - |
Domanda
Ho usato la variabile d'ambiente TMP
di controllare le cose come dove gcc scrive è i file temporanei, ma non riesco a trovare un equivalente per Java di createTempFile API.
Esiste un tale variabile d'ambiente esiste?
Soluzione
Hmmm - dal momento che questo viene gestito dalla JVM, ho approfondito l'codice sorgente OpenJDK VM un po ', pensando che forse ciò che è fatto da imita OpenJDK Quel che è fatto da Java 6 e prima. Non è rassicurante il fatto che ci sia un modo per fare questo diverso su Windows.
di Windows , la funzione get_temp_directory()
di OpenJDK fa una chiamata API Win32 per GetTempPath()
; questo è come su Windows, Java riflette il valore della variabile di ambiente TMP
.
Linux e Solaris , le stesse funzioni get_temp_directory()
restituiscono un valore statico di /tmp/
.
Non so se l'attuale JDK6 segue queste convenzioni esatte, ma dal comportamento su ciascuna delle piattaforme elencate, sembra che lo fanno.
Altri suggerimenti
Secondo il java.io.File
Java Docs
La directory temporanea-file predefinito è specificato dalla java.io.tmpdir proprietà di sistema. Sui sistemi UNIX il valore predefinito di questa proprietà è in genere "/ tmp" o "/ var / tmp"; sui sistemi Microsoft Windows è in genere "c: \ temp". Un altro valore può essere dato a questa proprietà di sistema quando la macchina virtuale Java viene richiamato, ma le modifiche programmatiche a questa proprietà non sono garantiti per avere alcun effetto sulla directory temporanea utilizzata da questo metodo.
Per specificare la proprietà java.io.tmpdir
sistema, è possibile richiamare la JVM come segue:
java -Djava.io.tmpdir=/path/to/tmpdir
Per impostazione predefinita questo valore deve venire dalla variabile d'ambiente TMP
su sistemi Windows
Si potrebbe impostare la variabile d'ambiente _JAVA_OPTIONS
. Per esempio in bash questo sarebbe fare il trucco:
export _JAVA_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir
ho messo nel mio scritto di inizio bash e sembra fare il trucco.
Usa
$ java -XshowSettings
Property settings:
java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
java.io.tmpdir = /tmp
Non è una variabile di ambiente, ma dà ancora di controllare la directory temp:
-Djava.io.tmpdir
es:.
java -Djava.io.tmpdir=/mytempdir
Per essere chiari su ciò che sta succedendo qui:
-
Il metodo consigliato per impostare il percorso della directory temporanea è quello di impostare la proprietà di sistema denominata "java.io.tmpdir", ad esempio, dando la possibilità
-Djava.io.tmpdir=/mytempdir
al comandojava
. La proprietà può essere modificata anche dall'interno di un programma chiamandoSystem.setProperty("java.io.tmpdir", "/mytempdir)
... problemi di sicurezza modulo sandbox. -
Se non si imposta in modo esplicito la proprietà "java.io.tmpdir" all'avvio, la JVM inizializza a un piattaforma specifica valore di default. Per Windows, il valore predefinito è ottenuto da una chiamata a un metodo API Win32. Per Linux / Solaris il default è apparentemente hard-wired. Per le altre JVM potrebbe essere qualcos'altro.
Empiricamente, la variabile d'ambiente "TMP" funziona su Windows (con JVM correnti), ma non su altre piattaforme. Se vi preoccupate per la portabilità è necessario impostare in modo esplicito la proprietà di sistema.
Usa sotto comando sul terminale UNIX:
java -XshowSettings
Questo mostrerà tutte le proprietà Java e le impostazioni di sistema.
In questo look per il valore java.io.tmpdir
.