使用URL或文件(在ImageIO.read中)
我制作了一个使用多个图像的应用程序。 我有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文件中使用的情况
为什么? 我以为他们差不多了。 我的案子有通用的方法吗?
我一直用:
BufferedImage backgroundImage = ImageIO.read(getClass().getResource("res/field.png"));
它既可以在IDE中运行,也可以在jar内部运行。 .getResource(…)返回一个URL,jar://或file://
请注意,路径要么以/开头(在这种情况下它是相对于包根),要么是相对于类包 – 如果你的类是com.example.Test, /res/
引用文件夹com /例如/测试/ RES /。
您甚至可以使用静态版本 – YourClassName.class.getResource(…),它允许您轻松到达包树的其他“分支”(您可以使用引用来自位于不同分支的类)
对于java.io
,相对路径依赖于当前工作目录。 使用getResource,您必须在classpath
拥有该资源。