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