访问.jar文件中的文件

可能重复:
如何从Java jar文件中读取资源文件?

谷歌搜索几个小时后开始完全疯狂。 我也看到了网站上的问题的变化,但似乎无法让它工作。 JFrame需要从ini文件中读取数据,并且我已经创建了一个打开所述文件的方法。 所述文件存储在jar文件中名为resources的文件夹中。

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文件后抛出exception。 我已经研究过使用InputStream,FileInputStream但似乎找不到可行的解决方案。

如何让jar文件识别资源?

当您的资源在JAR文件中时,它不再是文件。 文件只是文件系统上的物理文件。 解决方案:使用getResourceAsStream 。 像这样的东西:

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

你正在读错文件。 如果文件位于JAR中,则无法使用File类。 相反,您必须使用getResourceAsStream()获取文件的InputStream

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