Quando System.getProperty ("java.io.tmpdir") restituisce "c: \ temp"


110

Sono solo curioso di System.getProperty("java.io.tmpdir")sapere quando ritorna "c:\temp". Secondo java.io.File Java Docs -

La directory dei file temporanei predefinita è specificata dalla proprietà di sistema java.io.tmpdir. Su sistemi UNIX il valore predefinito di questa proprietà è tipicamente "/ tmp" o "/ var / tmp"; sui sistemi Microsoft Windows è tipicamente "c: \ temp". È possibile assegnare un valore diverso a questa proprietà di sistema quando viene richiamata la Java virtual machine, ma non è garantito 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"));

Restituisce sempre-

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

In quali condizioni tornerà "c:\temp"?

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


4
en.wikipedia.org/wiki/Temporary_folder Guardando il wiki, direi che puoi farlo C:\Tempmodificando% TEMP%, installando Windows 98 o passandolo a java -Djava.io.tmpdir=C:\Temp. Verificate anche questo: stackoverflow.com/questions/3437095/...
bezmax

@ Max Grazie MAX. Se cambio% TEMP% in C:\Tempallora otterrò C:\Temp. Destra? ma doc show c:\Tempinvece di C:\Temp. :)
Ashish Pancholi

2
non so perché la lettera di unità è importante per la tua applicazione?
Ajduke

@AshishPancholi non ti ha portato lì?
Ajduke

Il Javadoc 1.4.2 a cui ti stai collegando è obsoleto. L'attuale 7 Javadoc menziona una directory "tipica" di "C:\\WINNT\\TEMP".
Abdull il

Risposte:


128

In MS Windows la directory temporanea è impostata dalla variabile d'ambiente TEMP. In XP, la directory temporanea era impostata per utente come Impostazioni locali \ Temp.

Se modifichi la variabile d'ambiente TEMP in C:\temp, ottieni lo stesso quando esegui:

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


2
Su Windows c'è una seconda variabile d'ambiente chiamata% TMP% ed è questa che a volte viene utilizzata, non% TEMP%, ad esempio il plugin GWT per Eclipse utilizza la variabile% TMP%.
Wee Shetland

@ Joshi: la tua risposta è abbastanza precisa. Tuttavia, non sono d'accordo con l'esempio che hai fornito: se l'utente imposta TMPenv var, TEMPverrà ignorato. Per favore, fai riferimento alla mia risposta e fammi sapere se non hai capito cosa intendo.
Zakaria


33

Da un lato, quando chiami l' System.getProperty("java.io.tmpdir")istruzione, Java chiama la funzione dell'API Win32 GetTempPath. Secondo MSDN :

La funzione GetTempPath verifica l'esistenza di variabili di ambiente nell'ordine seguente e utilizza il primo percorso trovato:

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

D'altra parte, controlla le ragioni storiche sul perché TMPe TEMPcoesistono . Vale davvero la pena leggerlo.


0

Il valore della %TEMP%variabile di ambiente è spesso specifico dell'utente e Windows lo configura in relazione all'account utente attualmente connesso. Alcuni account utente possono avere nessun profilo utente, per esempio quando le corse di processo come un servizio su SYSTEM, LOCALSYSTEMo altro account predefinito, o è richiamato da applicazioni IIS con l'identità AppPool con Crea profilo utente opzione disattivata. Quindi, anche quando non sovrascrivi la %TEMP%variabile in modo esplicito, Windows potrebbe utilizzare c:\tempo persino c:\windows\tempcartelle per, diciamo, account utente non usuali. E, cosa più importante, il processo potrebbe non avere diritti di accesso a questa directory!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.