如何从java类中读取文件,两者都在同一个jar中

时间:2011-03-29 17:31:48

标签: java jar

我在jar中有以下结构

  

myjar.jar - > com - > MYProgram.class

       -> file.txt

在MYProgram中,我正在尝试:

getClass().getResourceAsStream("../file.txt")

当我尝试读取输入流时,我得到NullpointerException ..

哪里出错?

2 个答案:

答案 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_pa​​ckage_name是此对象的包名称,其中'/'替换为'。' ( '\ u002e')。

  •   

这会把你的路径变成这条绝对的路径:

/com/../file.txt

我认为..符号并不受尊重。它确实寻找上述绝对路径。