Wann gibt System.getProperty ("java.io.tmpdir") "c: \ temp" zurück?

110

Ich bin nur neugierig, wann System.getProperty("java.io.tmpdir")ich zurückkomme "c:\temp". Laut java.io.File Java Docs -

Das Standardverzeichnis für temporäre Dateien 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". Diese Systemeigenschaft kann einen anderen Wert erhalten, wenn die Java Virtual Machine aufgerufen wird. Es ist jedoch nicht garantiert, dass programmatische Änderungen an dieser Eigenschaft Auswirkungen auf das von dieser Methode verwendete temporäre Verzeichnis haben.

Aber in meinem Fall-

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

Immer zurück-

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

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

BEARBEITET: Wenn ich% TEMP% in C: \ Temp ändere, erhalte ich C: \ Temp, richtig? Die Dokumentation zeigt jedoch c: \ Temp anstelle von C: \ Temp.

Ashish Pancholi
quelle
4
en.wikipedia.org/wiki/Temporary_folder Wenn Sie sich das Wiki ansehen, würde ich sagen, dass Sie es schaffen können, C:\Tempindem Sie% TEMP% ändern, Windows 98 installieren oder an übergeben java -Djava.io.tmpdir=C:\Temp. Überprüfen Sie auch dies: stackoverflow.com/questions/3437095/…
bezmax
@ Max Danke MAX. Wenn ich% TEMP% auf ändere, C:\Tempbekomme ich C:\Temp. Richtig? aber doc show c:\Tempstatt C:\Temp. :)
Ashish Pancholi
2
Ich weiß nicht, warum der Laufwerksbuchstabe für Ihre Bewerbung wichtig ist.
Ajduke
@ AshishPancholi hat dich nicht dorthin gebracht?
Ajduke
Das 1.4.2 Javadoc, auf das Sie verlinken, ist veraltet. Das aktuelle 7 Javadoc erwähnt ein "typisches" Verzeichnis von "C:\\WINNT\\TEMP".
Abdull

Antworten:

128

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

Wenn Sie Ihre TEMP-Umgebungsvariable in ändern C:\temp, erhalten Sie beim Ausführen Folgendes:

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

Madhusudan Joshi
quelle
2
Unter Windows gibt es eine zweite Umgebungsvariable namens% TMP%, die manchmal verwendet wird, nicht% TEMP%. Beispielsweise verwendet das GWT-Plugin für Eclipse die Variable% TMP%.
Wee Shetland
@ Joshi: Deine Antwort ist ziemlich genau. Ich bin jedoch nicht mit dem Beispiel einverstanden, das Sie gegeben haben: Wenn der Benutzer die TMPenv var festgelegt hat, TEMPwird die ignoriert. Bitte beziehen Sie sich auf meine Antwort und lassen Sie mich wissen, wenn Sie nicht verstanden haben, was ich meine.
Zakaria
38

Wenn Sie einstellen

-Djava.io.tmpdir=C:\temp
Peter Lawrey
quelle
17
Windows-Dateinamen unterscheiden nicht zwischen Groß- und Kleinschreibung.
Peter Lawrey
33

Einerseits System.getProperty("java.io.tmpdir")ruft Java beim Aufrufen von Anweisungen die Funktion der Win32-API auf GetTempPath. Laut MSDN :

Die GetTempPath-Funktion überprüft das Vorhandensein von Umgebungsvariablen in der folgenden Reihenfolge und verwendet den ersten gefundenen Pfad:

  1. Der von der TMP-Umgebungsvariablen angegebene Pfad.
  2. Der von der Umgebungsvariablen TEMP angegebene Pfad.
  3. Der von der Umgebungsvariablen USERPROFILE angegebene Pfad.
  4. Das Windows-Verzeichnis.

Auf der anderen Seite überprüfen Sie bitte die historischen Gründe, warum TMPund TEMPkoexistieren . Es ist wirklich lesenswert.

Zakaria
quelle
0

Der Wert der %TEMP%Umgebungsvariablen ist häufig benutzerspezifisch und wird von Windows in Bezug auf das aktuell angemeldete Benutzerkonto eingerichtet. Einige Benutzerkonten können kein Benutzerprofil haben, zum Beispiel , wenn Ihr Prozess läuft als Dienst auf SYSTEM, LOCALSYSTEModer andere integrierte Konten oder durch II - Anwendung mit AppPool Identität aufgerufen mit Benutzerprofil erstellen deaktiviert Option. Selbst wenn Sie %TEMP%Variablen nicht explizit überschreiben , verwendet Windows möglicherweise Ordner c:\tempoder sogar c:\windows\tempOrdner für beispielsweise nicht übliche Benutzerkonten. Und was noch wichtiger ist, der Prozess hat möglicherweise keine Zugriffsrechte auf dieses Verzeichnis!

Maciek
quelle