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?

È stato utile?

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 comando java. La proprietà può essere modificata anche dall'interno di un programma chiamando System.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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top