10

有几个Java 系统属性,其中包括java.homepath.separatoruser.home。该规范没有提到任何关于这些值存在的正式承诺。

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

4

4 回答 4

4

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

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

我从未见过user.home默认情况下为 null 或错误指定。但是,请记住,用户可以使用 覆盖-Duser.home=...,因此您不能依赖它来指向现有路径。

于 2013-06-10T12:31:11.413 回答
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

于 2013-06-10T12:26:43.567 回答
1

默认属性会因操作系统而异。将有一些没有定义值的键。在我的机器上我发现user.variant并且user.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,似乎它在大多数情况下都已定义。查看这篇有趣的帖子,人们在其中发布了不同机器上的系统属性列表。

于 2013-06-10T13:25:57.113 回答
1

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

于 2013-06-10T12:46:58.590 回答