2013-05-03 6 views
68

Nur neugierig, wenn System.getProperty("java.io.tmpdir")"c:\temp" zurückgibt. Nach den java.io.FileJava Docs -Wann gibt System.getProperty ("java.io.tmpdir") "c: temp" zurück

Das temporären Standard-Dateiverzeichnis wird durch die Systemeigenschaft java.io.tmpdir angegeben. Auf UNIX-Systemen lautet der Standardwert dieser Eigenschaft normalerweise "/ tmp" oder "/ var/tmp"; Auf Microsoft Windows-Systemen ist dies normalerweise "c: \ temp". Ein anderer Wert kann dieser Systemeigenschaft zugewiesen werden, wenn die Java Virtual Machine aufgerufen wird. Programmatische Änderungen an dieser Eigenschaft haben jedoch keine Auswirkungen auf das temporäre Verzeichnis, das von dieser Methode verwendet wird.

Aber in meinem Fall-

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

RÜCKKEHR, immer

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

In welchen Bedingungen wird es "c:\temp" zurückkehren?

EDITED: Wenn ich% TEMP% auf C: \ Temp ändere, dann bekomme ich C: \ Temp, oder? Aber die Dokumentation zeigt c: \ Temp anstelle von C: \ Temp.

+4

http://en.wikipedia.org/wiki/Temporary_folder Wenn ich mir das Wiki ansehe, würde ich sagen, dass man es 'C: \ Temp' machen kann, indem man% TEMP% ändert, Windows 98 installiert oder an' java übergibt -Djava.io.tmpdir = C: \ Temp'. Siehe auch: http://stackoverflow.com/questions/3437095/windows-temp-directory-details-java – bezmax

+0

@Max Danke MAX. Wenn ich% TEMP% zu 'C: \ Temp 'ändere, dann bekomme ich' C: \ Temp'. Recht? aber doc zeigen 'c: \ Temp' anstelle von' C: \ Temp'. :) –

+2

Ich weiß nicht, warum der Laufwerksbuchstabe mit Ihrer Anwendung wichtig ist? – ajduke

Antwort

77

In MS Windows das temporäre Verzeichnis wird durch die Umgebungsvariable TEMP gesetzt. In XP wurde das temporäre Verzeichnis pro Benutzer als Lokale Einstellungen \ Temp festgelegt.

Wenn Sie Ihre TEMP-Umgebungsvariable auf C:\temp ändern Sie dann die gleiche, wenn Sie laufen:

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

+2

Unter Windows gibt es eine zweite Umgebungsvariable mit dem Namen% TMP%. Diese wird manchmal verwendet, nicht% TEMP%, zum Beispiel verwendet das GWT-Plugin für Eclipse die Variable% TMP%. –

+0

@Joshi: Ihre Antwort ist ziemlich genau. Ich stimme jedoch nicht mit dem Beispiel überein, das Sie angegeben haben: Wenn der Benutzer den 'TMP'-env var gesetzt hat, wird der' TEMP' ignoriert. Bitte, beziehen Sie sich auf meine Antwort und lassen Sie mich wissen, wenn Sie nicht verstanden haben, was ich meine. – Zakaria

27

Wenn Sie

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

Windows-Dateinamen unterscheiden nicht zwischen Groß- und Kleinschreibung. –

21

Auf der einen Seite, wenn Sie System.getProperty("java.io.tmpdir") Anweisung aufrufen, Java ruft die Funktion des Win32-API GetTempPath . Nach the MSDN:

Die GetTempPath Funktion überprüft das Vorhandensein von Umwelt Variablen in der folgenden Reihenfolge und verwendet den ersten Pfad gefunden:

  1. Der Weg durch die Variable TMP Umgebung angegeben.
  2. Der durch die Umgebungsvariable TEMP angegebene Pfad.
  3. Der Pfad, der von der Umgebungsvariablen USERPROFILE angegeben wird.
  4. Das Windows-Verzeichnis.

Auf der anderen Seite, bitte the historical reasons on why TMP and TEMP coexist überprüfen. Es ist wirklich lesenswert.

0

Wert der %TEMP% Umgebungsvariable ist oft benutzerspezifisch und Windows richtet es in Bezug auf derzeit angemeldeten Benutzerkonto ein.Einige Benutzerkonten haben möglicherweise kein Benutzerprofil, z. B. wenn Ihr Prozess als Dienst unter SYSTEM, LOCALSYSTEM oder einem anderen integrierten Konto ausgeführt wird oder von der IIS-Anwendung mit AppPool-Identität mit Benutzerprofil erstellen Option deaktiviert aufgerufen wird. Selbst wenn Sie die Variable %TEMP% nicht explizit überschreiben, kann Windows c:\temp oder sogar c:\windows\temp Ordner für, sagen wir, nicht übliche Benutzerkonten verwenden. Und was noch wichtiger ist, der Prozess hat möglicherweise keine Zugriffsrechte auf dieses Verzeichnis!

Verwandte Themen