使用相同的String计算在.jar和eclipse中查找资源

时间:2012-11-15 12:42:23

标签: java resources path javax.imageio

我想获取ImageIO的资源路径,以便从某些.png中读出BufferedImage。 在开发项目的过程中,我使用“/bin/stuff/icons/image.png”的相对路径,但是当我将所有内容放在.jar文件中时,这肯定不起作用,所以我需要一种方法来获取路径这些资源都是在eclipse中测试时以及稍后在.jar中运行时的。

2 个答案:

答案 0 :(得分:1)

经过大量尝试找到文件并将输入流输入到文件后,我得出的结论是这种方法每次都有效:

InputStream in = ClassLoader.getSystemClassLoader().getResourceAsStream(path)
BufferedImage image = ImageIO.read(in)

路径

"projectName/resourceFolder/" + nameOfResource.stuff

在eclipse项目的src目录中找到。

E.g。

"myProject/images/icon.png"

当只获取资源然后获取资源的路径以链接到文件时,在使用.jar时将获得FileNotFoundExceptions(但是在使用eclipse进行测试时不会这样,因此应该警告应该认为他的代码有效)。

而且 - 不 - 我没有在bin /中保存图像 - 但是它们会被复制到这个目录中,因此我会在测试时找到它们。现在一切似乎都在起作用。

答案 1 :(得分:0)

不要在Eclipse的bin目录下放置任何内容:如果在项目上运行clean,它将被删除。

您可以做的是定义一个新的源文件夹,如resources,并将图像放在那里。这样它就会自动复制到bin文件夹。

如果您将resources文件夹包含在Jar中,它将在以下两种环境中使用:

ImageIO.read( getClass().getResource("/image.png") )

PS:你可以使用不同的资源文件夹逃避,但混合源和图像会很快污染你的源文件夹。