访问JAR资源

时间:2010-04-14 18:23:19

标签: java jar resources embedded-resource relative-path

我有一个jar文件,其中包含我要分发的资源(主要是缓存,日志记录等配置)。

我遇到了这些资源的相对路径问题,所以我做了我在另一个stackoverflow问题中发现的问题,该问题说这是一种有效的方式:

ClassInTheSamePackageOfTheResource.class.getResourceAsStream('resource.xml');

可悲的是,这不起作用。

有什么想法吗?谢谢!

  PS:显然我不能绝对使用   路径,我想避免   环境变量,如果可能的话

4 个答案:

答案 0 :(得分:11)

确保您的资源文件夹在项目设置中列为源文件夹。此外,请确保在构建jar时将资源文件夹设置为导出。

您可以在jar文件中添加.zip扩展名,然后将其打开以确保您的资源包含在预期的位置。

我总是使用这样的绝对路径:

InputStream input = this.getClass().getResourceAsStream("/image.gif");

使用绝对路径时,“/”是jar文件中的根文件夹,而不是主机的根文件夹。

答案 1 :(得分:1)

我总是不得不通过getResourceAsStream来解决这个问题。如果“{资源文件夹”在org/pablo/opus中,我你想要这个:

Name.class.getResourceAsStream("org.pablo.opus.resource.xml");

答案 2 :(得分:1)

找到resource.xml的位置?如果在源树的根目录中,请尝试使用/.

作为前缀

答案 3 :(得分:1)

我通常会存储文件和其他资源,然后将其作为网址检索:

URL url = MyClass.class.getResource("/design/someResource.png");

在静态环境中,或以其他方式:

URL url = getClass().getResource("/design/someResource.png");

来自一个实例。

上面的代码段假设设计是jar中的顶级文件夹。通常,如果路径以“/”开头,则它采用绝对路径,否则它与类位置相关。