Ciekawe, kiedy System.getProperty("java.io.tmpdir")
wraca "c:\temp"
. Zgodnie z java.io.File Java Docs -
Domyślny katalog plików tymczasowych jest określony we właściwości systemowej java.io.tmpdir. W systemach UNIX domyślną wartością tej właściwości jest zazwyczaj „/ tmp” lub „/ var / tmp”; w systemach Microsoft Windows jest to zazwyczaj „c: \ temp”. Ta właściwość systemowa może mieć inną wartość, gdy wywoływana jest wirtualna maszyna Java, ale programowe zmiany tej właściwości nie mają żadnego wpływu na katalog tymczasowy używany przez tę metodę.
Ale w moim przypadku-
System.out.println(System.getProperty("java.io.tmpdir"));
Zawsze wraca
C:\Users\admin\AppData\Local\Temp\ i.e. %TEMP%
W jakich warunkach wróci "c:\temp"
?
EDYTOWANE: Jeśli zmienię% TEMP% na C: \ Temp, otrzymam C: \ Temp, prawda? Ale dokumentacja pokazuje c: \ Temp zamiast C: \ Temp.
C:\Temp
zmieniając% TEMP%, instalując Windows 98 lub przekazując go dojava -Djava.io.tmpdir=C:\Temp
. Zobacz także: stackoverflow.com/questions/3437095/…C:\Temp
to otrzymamC:\Temp
. Dobrze? ale dokument pokażc:\Temp
zamiastC:\Temp
. :)"C:\\WINNT\\TEMP"
.Odpowiedzi:
W MS Windows katalog tymczasowy jest ustawiany przez zmienną środowiskową
TEMP
. W XP katalog tymczasowy został ustawiony dla każdego użytkownika jako Local Settings \ Temp.Jeśli zmienisz zmienną środowiskową TEMP na
C:\temp
, otrzymasz to samo po uruchomieniu:System.out.println(System.getProperty("java.io.tmpdir"));
źródło
TMP
zmienną env, toTEMP
zostanie zignorowana. Proszę, zapoznaj się z moją odpowiedzią i daj mi znać, jeśli nie zrozumiałeś, co mam na myśli.Jeśli ustawisz
źródło
Z jednej strony, gdy wywołujesz
System.getProperty("java.io.tmpdir")
instrukcję, Java wywołuje funkcję Win32 APIGetTempPath
. Według MSDN :Z drugiej strony, sprawdź historyczne powody, dla których istnieją
TMP
iTEMP
współistnieją . Naprawdę warto przeczytać.źródło
Wartość
%TEMP%
zmiennej środowiskowej jest często specyficzna dla użytkownika i system Windows konfiguruje ją z uwzględnieniem aktualnie zalogowanego konta użytkownika. Niektóre konta użytkowników może nie mieć profil użytkownika, na przykład, gdy proces działa jako usługaSYSTEM
,LOCALSYSTEM
lub inne wbudowane konto, lub jest wywoływana przez aplikację IIS z AppPool identyczności Tworzenie profilu użytkownika opcję wyłączoną. Więc nawet jeśli nie nadpisujesz%TEMP%
zmiennej jawnie, system Windows może używać,c:\temp
a nawetc:\windows\temp
folderów, powiedzmy, dla niestandardowych kont użytkowników. A co ważniejsze, proces może nie mieć praw dostępu do tego katalogu!źródło