File f = new File(System.getProperty("user.home/Downloads"));
为什么这段代码会出现NPE错误?
我知道它返回null,但目录就在那里......
答案 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
。