Java系统属性是否始终为非null?

时间:2013-06-10 12:22:52

标签: java java-home system-properties home-directory

有几个Java system properties,其中包括java.homepath.separatoruser.home等内容。 spec没有提到关于这些价值观存在的任何正式承诺。

特别是我对user.home感兴趣。它总是指向一些现有的路径吗?

4 个答案:

答案 0 :(得分:4)

我认为您可以放心地假设该列表中的所有属性始终可用于任何最新的(Oracle提供的)JVM。

然而,null检查更具防御性,在这种情况下并不昂贵。

我从未见过user.home为null或默认情况下未正确指定。但请注意,用户可以使用-Duser.home=...覆盖,因此您无法依赖它来指向现有路径。

答案 1 :(得分:3)

您指出的文档说明

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

因此,如果该属性不存在,您将获得null

答案 2 :(得分:1)

规范说user.home包含用户主目录,但它没有说它可能包含null。我毫不怀疑JVM保证它总是被设置。

答案 3 :(得分:1)

默认属性因操作系统而异。将有一些键没有定义任何值。在我的机器上,我发现user.variantuser.timezone没有任何值!以下是将列出所有键值对的代码:

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的具体参考,似乎大部分时间都是定义的。查看此interesting post,其中人们已在不同的计算机上发布了系统属性列表。