2011-11-24 119 views
13

可能重复:
How do I read a resource file from a Java jar file?访问.jar文件中的文件

开始为谷歌搜索小时后去彻底疯狂了这一点。我也看到了该网站上的问题的变体,但似乎无法得到它的工作。一个JFrame需要从一个ini文件中读取数据,并且我已经创建了一个方法来打开这个文件。所述文件存储在jar文件内称为资源的文件夹中。

private BufferedReader openIniFile(String filename){ 
    BufferedReader brReader = null;     
    try{ 
     File fileObj = new File(this.getClass().getResource("/resources/" + filename).toURI()); // The fileobject of the file to read 
     if(fileObj.exists())            
      brReader = new BufferedReader(new FileReader(fileObj));      

    } catch(Exception e){ 
     System.err.println("Exception while opening file: " + e.getMessage()); 

    } 

    return null; 
} 

这当然适用于编译后运行代码但在导出为.jar文件后引发异常。我研究过使用InputStream,FileInputStream,但似乎无法找到可行的解决方案。

如何让jar文件识别资源?

+0

我试过了,不能让它的工作:( – Chrizmo

+0

“无法得到它的工作”不帮差不多都是这个价钱 –

+0

对不起。它仍然抛出一个空例外 – Chrizmo

回答

19

当您的资源位于JAR文件中时,它不再是文件。文件只是文件系统上的物理文件。 解决方法:使用getResourceAsStream。类似这样的:

new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/resources/" + filename))) 
+0

但是,如果我使用getResourceAsStream,我不能使用File类吗? – Chrizmo

+1

没错。一个文件 –

+1

我有一个包含所有文件的资源目录,如何浏览目录以访问所有文件,然后使用上面的内容? – Ava

4

您正在阅读的文件有误。如果文件位于JAR中,则不能使用File类。相反,你必须得到一个InputStream使用getResourceAsStream()文件:

InputStream in = this.getClass().getResourceAsStream("/resources/" + filename);