谷歌搜索几个小时后开始完全疯狂。我也在网站上看到了问题的变化,但似乎无法让它发挥作用。 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文件后抛出异常。我已经研究过使用InputStream,FileInputStream,但似乎无法找到可行的解决方案。
如何让jar文件识别资源?
答案 0 :(得分:21)
当您的资源位于JAR文件中时,它不再是文件。文件只是文件系统上的物理文件。 解决方案:使用getResourceAsStream。像这样:
new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/resources/" + filename)))
答案 1 :(得分:4)
你正在读错文件。如果文件位于JAR中,则无法使用File
类。相反,您必须使用InputStream
获取getResourceAsStream()
文件:
InputStream in = this.getClass().getResourceAsStream("/resources/" + filename);