为什么这段代码会获得NPE?

时间:2012-11-17 02:54:44

标签: java

File f = new File(System.getProperty("user.home/Downloads"));

为什么这段代码会出现NPE错误?

我知道它返回null,但目录就在那里......

2 个答案:

答案 0 :(得分:6)

因为

System.getProperty("user.home/Downloads")

返回null,因为没有使用键user.home/Downloads

设置此类属性

您可能正在寻找

final String fileName = System.getProperty("user.home") + File.saperator + "Downloads";
File f = new File(fileName);

答案 1 :(得分:0)

属性是<key,value>对(两个字符串)的集合,可以为您提供有关某些预定义系统属性的信息。预定义的内容列在函数System.getProperties的{​​{3}}中。定义了以下键:

java.version
java.vendor 
java.vendor.url 
java.home 
java.vm.specification.version 
java.vm.specification.vendor 
java.vm.specification.name 
java.vm.version 
java.vm.vendor 
java.vm.name 
java.specification.version 
java.specification.vendor 
java.specification.name 
java.class.version 
java.class.path 
java.library.path 
java.io.tmpdir 
java.compiler 
java.ext.dirs 
os.name 
os.arch 
os.version 
file.separator 
path.separator 
line.separator 
user.name 
user.home 
user.dir

正如您所看到的那样,user.home位于该列表中,这就是调用System.getProperty("user.home");完全正常的原因。

但是,您使用参数getProperty调用user.home/Downloads方法 - 这是一个未定义的键,因为它不在上面的列表中。

如果您想将"/Downloads"附加到用户的主目录,则必须在getProperty电话之外进行操作:

System.getProperty("user.home") + "/Downloads";

这样,您使用的是已定义的密钥,但不会获得NullPointerException