System.getProperty ("java.io.tmpdir") ne zaman "c: \ temp" döndürür?


110

Ne zaman System.getProperty("java.io.tmpdir")döneceğini merak ediyorum "c:\temp". Göre java.io.File Java Dokümanlar -

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

Ama benim durumumda-

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

Daima döner

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

Hangi koşullarda geri dönecek "c:\temp"?

DÜZENLENMİŞ:% TEMP% 'i C: \ Temp olarak değiştirirsem, C: \ Temp alacağım, değil mi? Ancak dokümantasyon, C: \ Temp yerine c: \ Temp gösterir.


4
en.wikipedia.org/wiki/Tporary_folder Wiki'ye baktığımızda, C:\Temp% TEMP% değiştirerek, Windows 98'i yükleyerek ya da onu aktararak başarabileceğinizi söyleyebilirim java -Djava.io.tmpdir=C:\Temp.
Şunu

@Max Teşekkürler MAX. % TEMP% 'i olarak değiştirirsem C:\Temp, alırım C:\Temp. Sağ? ancak c:\Tempyerine doc göster C:\Temp. :)
Ashish Pancholi

2
Başvurunuzda sürücü harfinin neden önemli olduğunu bilmiyorum?
ajduke

@AshishPancholi seni oraya götürmedi mi?
ajduke

Bağlandığınız 1.4.2 Javadoc'un süresi dolmuş. Mevcut 7 Javadoc , "tipik" bir dizininden bahseder "C:\\WINNT\\TEMP".
Abdull

Yanıtlar:


128

MS Windows'ta geçici dizin ortam değişkeni tarafından belirlenir TEMP. XP'de, geçici dizin kullanıcı başına Local Settings \ Temp olarak ayarlandı.

TEMP ortam değişkeninizi olarak değiştirirseniz C:\temp, çalıştırdığınızda aynısını alırsınız:

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


2
Windows'ta% TMP% adında ikinci bir ortam değişkeni vardır ve bu bazen% TEMP% yerine kullanılır, örneğin Eclipse için GWT eklentisi% TMP% değişkenini kullanır.
Wee Shetland

@Joshi: Cevabınız oldukça doğru. Ancak, verdiğiniz örneğe katılmıyorum: Eğer kullanıcı TMPenv değişkenini ayarladıysa , o TEMPzaman yok sayılacaktır. Lütfen cevabıma bakın ve ne demek istediğimi anlamadıysanız bana bildirin.
Zakaria


33

Bir yandan, System.getProperty("java.io.tmpdir")talimatı çağırdığınızda Java, Win32 API'nin işlevini çağırır GetTempPath. Göre MSDN :

GetTempPath işlevi, aşağıdaki sırayla ortam değişkenlerinin varlığını denetler ve bulunan ilk yolu kullanır:

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

Öte yandan, lütfen neden TMPve bir TEMParada var olmanın tarihsel nedenlerini kontrol edin . Gerçekten okumaya değer.


0

Değer %TEMP%ortam değişkeni genellikle kullanıcıya özeldir ve Windows şu anda kullanıcı hesabına giriş yapmış bakımından o kadar ayarlar. Bazı kullanıcı hesapları, örneğin Kullanıcı profiline sahip olabilir zaman üzerinde hizmet olarak işlem çalışır SYSTEM, LOCALSYSTEMya da diğer hesaptaki yerleşik veya AppPool kimliğiyle IIS uygulama tarafından çağrılır kullanıcı profili oluşturma engelli seçeneği. Dolayısıyla %TEMP%, değişkenin üzerine açıkça yazmasanız c:\tempbile , Windows, c:\windows\tempnormal olmayan kullanıcı hesapları için klasörler veya hatta klasörler kullanabilir . Daha da önemlisi, sürecin bu dizine erişim hakkı olmayabilir!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.