2013-05-03 28 views
68

Sadece System.getProperty("java.io.tmpdir"), "c:\temp" döndürdüğü zaman merak ediyor. java.io.FileJava Docs göre -System.getProperty ("java.io.tmpdir") ne zaman "c: temp" döndürdüğünde

varsayılan geçici dosya dizini sistem özelliği java.io.tmpdir tarafından belirtilir. UNIX sistemlerinde bu özelliğin varsayılan değeri genellikle "/ tmp" veya "/ var/tmp" şeklindedir; Microsoft Windows sistemlerinde genellikle "c: \ temp" dir. Java sanal makinesi çağrıldığında bu sistem özelliğine farklı bir değer verilebilir, ancak bu özelliğe ilişkin programatik değişikliklerin, bu yöntem tarafından kullanılan geçici dizin üzerinde herhangi bir etkisi olması garanti edilmez.

Ama vakadan- içinde

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

Daima hangi şartlarda bu "c:\temp" dönecektir yılında

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

döner-?

DÜZENLEME:% TEMP% 'yi C: \ Temp olarak değiştirirsem C: \ Temp alırım, değil mi? Ancak belgeler C: \ Temp yerine c: \ Temp gösterir. MS Windows

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

http://en.wikipedia.org/wiki/Temporary_folder Wiki'ye baktığınızda,% TEMP% değerini değiştirerek, Windows 98'i yükleyerek veya "java" ya geçirerek "C: \ Temp" yapabileceğinizi söyleyebilirim -Djava.io.tmpdir = C: \ Temp'. Ayrıca buna bir göz atın: http://stackoverflow.com/questions/3437095/windows-temp-directory-details-java – bezmax

+0

@Max Thanks MAX. % TEMP% 'yi "C: \ Temp" olarak değiştirirsem, o zaman "C: \ Temp" değerini alırım. Sağ? ama doc, "C: \ Temp" yerine "c: \ Temp" i gösterir. :) –

+2

Neden sürücü harfinin uygulamanızla ilgili olduğunu bilmiyor musunuz? – ajduke

cevap

77

ayarlarsanız

+2

Windows'da,% TMP% olarak adlandırılan ikinci bir ortam değişkeni var ve bu,% TEMP% değil, bazen kullanılır. Örneğin Eclipse için GWT eklentisi,% TMP% değişkenini kullanır. –

+0

@Joshi: Cevabınız oldukça doğru. Ancak, verdiğiniz örnekle aynı fikirde değilim: Eğer kullanıcı “TMP” env var ise, “TEMP” göz ardı edilecektir. Lütfen cevabıma bakın ve ne demek istediğimi anlamadıysan bana haber ver. – Zakaria

27

geçici dizin ortam değişkeni TEMP tarafından ayarlanır. XP'de, geçici dizin kullanıcı başına Yerel Ayarlar \ Temp olarak ayarlandı.

o zaman çalıştırdığınızda aynı olsun, C:\temp için TEMP ortam değişkeni değiştirirseniz

: Eğer System.getProperty("java.io.tmpdir") talimat çağırdığınızda

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

+15

Windows dosya adları büyük/küçük harfe duyarlı değildir. –

21

, Java Win32 API işlevi çağırır GetTempPath . the MSDN göre : şu sırayla değişken ve birinci yolu kullanır bulunan ortamda varlığına

GetTempPath işlev kontrolleri:

  1. TMP ortam değişkeni tarafından belirtilen yolu.
  2. TEMP ortam değişkeni tarafından belirtilen yol.
  3. USERPROFILE ortam değişkeni tarafından belirtilen yol.
  4. Windows dizini.
  5. Öte yandan

, the historical reasons on why TMP and TEMP coexist kontrol ediniz. Gerçekten okumaya değer.

0

%TEMP% ortam değişkeni değeri genellikle kullanıcıya özgüdür ve Windows, şu anda oturum açmış olan kullanıcı hesabıyla ilgili olarak ayarlar.Bazı kullanıcı hesaplarında kullanıcı profili olmayabilir, örneğin işleminiz SYSTEM, LOCALSYSTEM veya diğer yerleşik hesapta bir hizmet olarak çalıştığında veya ile AppPool kimliğine sahip IIS uygulaması tarafından çağrılan kullanıcı profili oluştur seçeneği devre dışı bırakılmış. Yani, %TEMP% değişkeninin üzerine açıkça yazmazsanız bile, Windows normal olmayan kullanıcı hesapları için c:\temp veya c:\windows\temp klasörlerini kullanabilir. Ve daha da önemli olan süreç, bu dizinin erişim haklarına sahip olamaz!

İlgili konular