有几个Java 系统属性,其中包括java.home
和path.separator
、user.home
。该规范没有提到任何关于这些值存在的正式承诺。
特别是我对user.home
. 它总是指向一些现有的路径吗?
我认为您可以放心地假设该列表中的所有属性在任何最近的(Oracle 提供的)JVM 中始终可用。
但是,null
检查更具防御性,在这种情况下并不昂贵。
我从未见过user.home
默认情况下为 null 或错误指定。但是,请记住,用户可以使用 覆盖-Duser.home=...
,因此您不能依赖它来指向现有路径。
您指出的文档指出
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
值
默认属性会因操作系统而异。将有一些没有定义值的键。在我的机器上我发现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
,似乎它在大多数情况下都已定义。查看这篇有趣的帖子,人们在其中发布了不同机器上的系统属性列表。
规范说user.home
包含用户主目录,但没有说它可能包含null
. 我毫不怀疑 JVM 保证它总是被设置。