2013-05-03 10 views
68

Solo curioso di sapere quando System.getProperty("java.io.tmpdir") restituisce "c:\temp". Secondo il java.io.FileJava Docs -Quando System.getProperty ("java.io.tmpdir") restituisce "c: temp"

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 valore diverso può essere assegnato a questa proprietà di sistema quando viene richiamata la macchina virtuale Java, ma non si garantisce che le modifiche programmatiche a questa proprietà abbiano alcun effetto sulla directory temporanea utilizzata da questo metodo.

Ma nel mio caso-

System.out.println(System.getProperty("java.io.tmpdir")); 

RITORNI sempre

C:\Users\admin\AppData\Local\Temp\ i.e. %TEMP% 

In quali condizioni intende tornare "c:\temp"?

MODIFICA: Se cambio% TEMP% in C: \ Temp, otterrò C: \ Temp, giusto? Ma la documentazione mostra c: \ Temp invece di C: \ Temp.

+4

http://en.wikipedia.org/wiki/Temporary_folder Guardando il wiki, direi che puoi renderlo 'C: \ Temp' cambiando% TEMP%, installando Windows 98 o passandolo a' java -Djava.io.tmpdir = C: \ Temp'. Controlla anche questo: http://stackoverflow.com/questions/3437095/windows-temp-directory-details-java – bezmax

+0

@Max Grazie MAX. Se cambio% TEMP% in 'C: \ Temp', otterrò' C: \ Temp'. Destra? ma doc mostra 'c: \ Temp' invece di' C: \ Temp'. :) –

+2

non so perché la lettera di unità conta con la vostra applicazione? – ajduke

risposta

77

In MS Windows directory temporanea viene impostato dalla variabile di ambiente TEMP. In XP, la directory temporanea è stata impostata per utente come Impostazioni locali \ Temp.

Se si cambia la variabile di ambiente TEMP a C:\temp, allora si ottiene lo stesso quando si esegue:

System.out.println(System.getProperty("java.io.tmpdir"));

+2

Su Windows è presente una seconda variabile di ambiente chiamata% TMP% ed è questa che a volte viene utilizzata, non% TEMP%, ad esempio il plug-in GWT per Eclipse utilizza la variabile% TMP%. –

+0

@Joshi: la tua risposta è abbastanza accurata. Tuttavia, non sono d'accordo con l'esempio che hai dato: Se l'utente imposta la variabile 'TMP' env var, il' TEMP' verrà ignorato. Per favore, fai riferimento alla mia risposta e fammi sapere se non hai capito cosa intendo. – Zakaria

27

Se si imposta

-Djava.io.tmpdir=C:\temp 
+15

I nomi dei file di Windows non fanno distinzione tra maiuscole e minuscole. –

21

Da un lato, quando si chiama System.getProperty("java.io.tmpdir") istruzioni, Java chiama la funzione di API Win32 GetTempPath . Secondo the MSDN:

I GetTempPath funzione verifica l'esistenza di ambiente variabili nel seguente ordine e utilizza il primo percorso trovati:

  1. Il percorso specificato dalla variabile ambiente TMP.
  2. Il percorso specificato dalla variabile di ambiente TEMP.
  3. Il percorso specificato dalla variabile di ambiente USERPROFILE.
  4. La directory di Windows.

D'altra parte, si prega di controllare the historical reasons on why TMP and TEMP coexist. Vale davvero la pena leggerlo.

0

Il valore della variabile di ambiente %TEMP% è spesso specifico dell'utente e Windows lo imposta in relazione all'account utente attualmente connesso.Alcuni account utente potrebbero non avere alcun profilo utente, ad esempio quando il processo viene eseguito come servizio su SYSTEM, LOCALSYSTEM o altro account incorporato oppure viene richiamato dall'applicazione IIS con identità AppPool con Opzione di creazione profilo utente disabilitata. Pertanto, anche quando non si sovrascrive la variabile %TEMP% in modo esplicito, Windows può utilizzare le cartelle c:\temp o anche c:\windows\temp per, diciamo, account utente non abituali. E, cosa più importante, il processo potrebbe non avere diritti di accesso a questa directory!

Problemi correlati