2013-06-10 29 views
10

java.home ve path.separator, user.home gibi öğeler arasında bir çift Java system properties vardır. spec, bu değerlerin varlığına ilişkin resmi sözlerden bahsetmez. Özellikle, user.home ile ilgileniyorum. Her zaman varolan bir yola işaret ediyor mu?Java sistem özellikleri her zaman boş değil midir?

+0

Sanırım bunlar anahtarlar – anshulkatta

+0

@anshulkatta; Anahtarların her zaman var olduğunu sanırım - ama soru şu, her zaman bir şeye işaret ediyorlar mı (aklı başında?). – miku

+0

Mıku tuşları sadece bir değer olduğunda mevcut, cevabımı kontrol edin – DevZer0

cevap

4

ben güvenle varsayabiliriz düşünüyorum o listedeki tüm özellikleri her zaman (Oracle tarafından sağlanan) JVM'de kullanılabilir. Bununla birlikte, bir null kontrol daha savunmasızdır ve bu durumda pahalı değildir.

user.home'u null olarak göremedim veya hatalı olarak varsayılan olarak belirtildi. Ancak, kullanıcıların -Duser.home=... ile geçersiz kılınabileceğini unutmayın, böylece mevcut bir yola işaret etmek için ona güvenemezsiniz.

+1

+1, kullanıcının herhangi bir özelliği anlamsız bir şekilde ayarlayabileceğini belirtmek için +1 – kdgregory

3

Eğer işaret dokümantasyon tesis null değeri elde yoksa

The getProperty method returns a string containing the value of the property. If the property does not exist, this version of getProperty returns null.

Yani devletler

+2

Bunun ne anlama geldiğinden emin değilim. Şüphesiz, Java sistemi özelliği "mambo.jumbo" null olacak, ancak normal bir özellik başlatılmamış için mümkün mü? –

+0

@PeterJaloveczki: Evet, "varsayılan" özelliklerin tanımlanmadığı durumlarda daha fazla ilgileniyorum (durum göz önünde bulundurulmadan, kullanıcı açıkça çöplüğe ayarlandığında, örneğin application.jar -Duser.home = good/luck – miku

1

Spesifikasyonlar, user.home'un kullanıcı ana dizini içerdiğini, null içerdiğini söylemediğini söylemez. JVM'nin her zaman ayarlandığını garanti ettiğinden şüphem yok.

1

Varsayılan özellikler, işletim sistemine bağlı olarak farklılık gösterecektir. Değerlerin tanımlanmadığı bazı tuşlar olacaktır. Makinemde herhangi bir değer olmadan user.variant ve user.timezone'u buldum! Tüm anahtar değer çiftleri aşağı listeler kod aşağıdadır:

Properties prop = System.getProperties();  
     Set<Object> set = prop.keySet();  
     Iterator<Object> itr = set.iterator(); 

     while(itr.hasNext()){ 

      Object obj = itr.next(); 
      String propVal = System.getProperty(obj.toString()); 
       System.out.println(obj.toString()+" = "+propVal); 

     } 
    } 

user.home hakkında özel referans ile ilgili olarak, çoğu zaman tanımlı görünüyor. İnsanların sistem özelliklerinin listesini farklı makinelere yükledikleri bu interesting post'a bakın.

+0

İçgörüler ve kod için teşekkürler – miku

+0

Sorunun bağlantısı bana bir cevap verdi: [System.getProperties] (http://docs.oracle .com/javase/1.5.0/docs/api/java/lang/System.html # getProperties% 28% 29): * Bu sistem özellikleri kümesi * ** her zaman aşağıdaki tuşları için * * değerleri içerir *. .. 'user.home' ... – miku