使用URL或文件(在ImageIO.read中)

时间:2012-11-05 11:19:31

标签: java file url javax.imageio

我制作了一个使用多张图片的应用程序。我有2种方式来运行我的应用程序:
- 在想法中按run - 制作一个胖jar文件并从控制台java -jar app.jar运行它

如果我想从Idea运行它,我必须使用:

BufferedImage backgroundImage = ImageIO.read(new File("res/field.png"));

而不是

BufferedImage backgroundImage = ImageIO.read(getClass().getClassLoader().getResource("res/field.png"));
< - 这就是我必须在jar文件中使用的

为什么呢?我以为他们差不多了。对我的案子有什么通用方法吗?

2 个答案:

答案 0 :(得分:2)

我总是使用:

BufferedImage backgroundImage = ImageIO.read(getClass().getResource("res/field.png"));

既可以在IDE中运行,也可以在jar内部运行。 .getResource(...)返回一个URL,jar://或file://

请注意,路径要么以/开头(在这种情况下它是相对于包根),要么它是相对于类包的 - 如果你的类是com.example.Test,/res/指的是文件夹com / example / Test / res /.

您甚至可以使用静态版本 - YourClassName.class.getResource(...),它可以让您轻松到达其他"分支"您的包树(您可以使用引用来自位于不同分支的类)

答案 1 :(得分:1)

使用java.io时,相对路径取决于当前工作目录。 使用getResource,您必须在classpath中拥有该资源。