问题描述
我在jar中有以下结构
myjar.jar - > com - > MYProgram.class
-> file.txt
在MYProgram中,我想做:
getClass().getResourceAsStream("../file.txt")
当我尝试读取输入流时,我得到NullpointerException。
哪里出错了?
1楼
要么使用
getClass().getResourceAsStream("/file.txt")
要么
getClass().getClassLoader().getResourceAsStream("file.txt")
( ClassLoader.getResourceAsStream
始终采用“绝对”资源名称。)
我不相信导航“目录层次结构”在getResourceAsStream
- 路径要么必须是相对于给定的类,而不是导航备份树,要么必须绝对开始。
2楼
尝试绝对路径:
getClass().getResourceAsStream("/file.txt")
的Javadoc说:
- 如果名称以'/'('\\ u002f')开头,则资源的绝对名称是'/'后面的名称部分。
否则,绝对名称具有以下形式:
modified_package_name/name
其中modified_pa??ckage_name是此对象的包名称,其中'/'替换为'。' ( '\\ u002e')。
这会把你的路径变成这条绝对的路径:
/com/../file.txt
我不认为..
符号是受到尊重的。
它确实寻找上述绝对路径。