访问JAR资源
我有一个jar
文件,其中包含我想分发的资源(主要是用于缓存,日志记录等的配置)。访问JAR资源
我在使用这些资源的相对路径的问题,所以我做了什么,我在另一个计算器问题,其表示,这是一个有效的办法已经找到:
ClassInTheSamePackageOfTheResource.class.getResourceAsStream('resource.xml');
可悲的是这并不行。
任何想法?谢谢!
PS:很明显,我不能使用绝对路径 ,我想避免 环境变量如果可能的话
确保您的资源文件夹在项目设置中列为源文件夹。另外,确保在构建jar时将资源文件夹设置为导出。
您可以向jar文件中添加一个.zip扩展名,然后将其打开,以确保您的资源包含在预期的位置。
我总是使用绝对路径是这样的:
InputStream input = this.getClass().getResourceAsStream("/image.gif");
当您使用绝对路径,“/”是jar文件的根文件夹,而不是主机的根文件夹。
为+1注意/是jar的根文件夹。 – Powerlord 2010-04-14 18:53:57
的确,我使用了你描述的(jar)绝对路径方法,它的工作原理!不知道为什么它没有与相关的技巧做到这一点......但足够好就足够了 – 2010-04-14 18:56:57
我总是通过getResourceAsStream
困扰,使这项工作。如果 “resource.xml” 是org/pablo/opus
,我认为你想这样的:
Name.class.getResourceAsStream("org.pablo.opus.resource.xml");
其中resource.xml发现的?如果在源代码树的根目录中,尝试用/作为前缀。
它不在源代码树的根目录下。它位于包 – 2010-04-14 18:41:11
中,因此将完全限定的名称视为绝对路径,例如com.me.and.u.effects.css将作为/com/me/and/u/effects.css进行访问, – Seffi 2010-04-14 18:50:27
我通常存储文件和其他资源,然后检索它们作为网址:
URL url = MyClass.class.getResource("/design/someResource.png");
在静态情况下,或以其他方式:
URL url = getClass().getResource("/design/someResource.png");
从一个实例。
上面的代码片段假定设计是jar中的*文件夹。一般来说,如果路径以“/”开始,它将采用绝对路径,否则它与班级位置是相对的。
资源文件与类文件位于同一文件夹中吗?这是一个独立的应用程序还是在Web服务器上运行? – kgiannakakis 2010-04-14 18:28:12
确实在同一个文件夹中。它是一个包含在Web应用程序中的jar,是的(但我认为它应该是无关紧要的) – 2010-04-14 18:34:21
它与搜索与给定类关联的资源的规则是由定义的类加载器实现的。因此,基于实现,您的Web应用程序的类加载器的行为可能会稍有不同。只是一个想法。 – 2010-04-14 18:38:26