【问题标题】:Accessing a file inside a .jar file [duplicate]访问 .jar 文件中的文件 [重复]
【发布时间】:2012-01-05 16:37:32
【问题描述】:

可能重复:
How do I read a resource file from a Java jar file?

在谷歌上搜索了几个小时后,我开始完全发疯了。我还在网站上看到了这个问题的变体,但似乎无法让它发挥作用。 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 文件识别资源?

【问题讨论】:

  • 我试过了,无法正常工作:(
  • “无法正常工作”并没有多大帮助
  • 很抱歉。它仍然抛出一个空异常。
  • ""不能让它工作"没有多大帮助"没有多大帮助

标签: java file resources jar


【解决方案1】:

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

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

【讨论】:

  • 但是如果我使用 getResourceAsStream 我不能使用 File 类吗?
  • 没错。这不是一个文件。
  • 我在资源中有一个目录,其中包含所有文件。如何浏览目录以访问所有文件然后在上面使用?
  • 简单有效的解决方案:制作一个包含您的资产或文件的 jar,然后对其进行评估。
【解决方案2】:

你读错了文件。如果文件位于 JAR 中,则不能使用 File 类。相反,您必须使用getResourceAsStream() 为文件获取InputStream

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

【讨论】:

    猜你喜欢
    • 2016-09-30
    • 2015-04-21
    • 2011-07-07
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 2015-09-19
    • 1970-01-01
    相关资源
    最近更新 更多