java - 如何使用相对路径查找包外的图像

标签 java intellij-idea

所以我试图访问我存储在应用程序结构中的 res 包中的图像。

结构如下

src
-> package1
-> -> innerPackage1
-> -> -> Test.java
-> res  
-> -> image.png

所以我尝试从内部类访问图像。 这是我到目前为止所尝试过的,还有更多的路径变体,但似乎从未奏效。

URL resource = Test.class.getResource("/res/image.png");
ImageIcon image = new ImageIcon(ImageIO.read(resource));

ImageIcon image = new ImageIcon("./res/image.png");

真正让我困惑的是我什至尝试将图像直接放入与 java 类相同的包中并调用

ImageIcon image = new ImageIcon("image.png");

即使这样也不起作用,所以现在我完全陷入了停滞。

它唯一一次对我有用是当我将类文件和图像文件直接移动到 src 文件中时

src
-> Test.java
-> image.png

然后这终于起作用了:

new ImageIcon( "./src/image.png" )

我现在想知道我正在使用的 IDE - intellij 的构建路径是否有问题。

该应用程序将在不同的设备上使用,因此需要使用相对路径。

非常感谢

最佳答案

这个项目中的文件夹结构看起来非常不传统。应该是:

src
|-main
   |-java
   |  |-package1
   |     |-innerPackage1
   |        |-Test.java   // although *Test* should be under src/test
   |-resources
      |-image.png

在 IntelliJ 项目配置中,src/main/java 应标记为“源根”,src/main/resources 应标记为“资源根”。这可以在项目设置中或右键单击文件夹来完成。

重组项目后,应该可以通过 getResource("/image.png") 访问图像。或者,通过 getResource("image.png") 移入 src/main/resources/package1/innerPackage1

更新

经过一些相对路径的测试后,使用原始文件夹结构。 Test.class.getResource(".") 应返回:

file:/{path to project}/{project name}/out/production/{project name}/package1/innerPackage1

因此,如果我们调用 Test.class.getResource("../.."),我们就会爬到打包内容的根 URL:

file:/{path to project}/{project name}/out/production/{project name}/

现在,如果我们调用 Test.class.getResource("../../res/image.png"),它应该可以访问。

URL resource = Test.class.getResource("../../res/image.jpg");
ImageIcon image = new ImageIcon(ImageIO.read(resource));

这应该可以解决问题,但远非一个干净的解决方案。

src 文件夹被 IntelliJ 视为“源根”文件夹,并且内部不能包含资源文件夹。 src 不包含在目标路径中,res 也不应包含在目标路径中。

因此,我建议将 res 文件夹移至与 src 相同的级别,并将其标记为“资源根目录”。之后,以下内容应该可以正常工作:

URL resource = Test.class.getResource("/image.jpg");
ImageIcon image = new ImageIcon(ImageIO.read(resource));

关于java - 如何使用相对路径查找包外的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49138070/

相关文章:

java - Android Studio 在调试器中将 byte[] 视为字符串

java - 如何更改动画计时器内通过键盘输入移动的对象的速度?

java - 如何触发内部关闭请求?

java - Intellij Idea 评论错误

grails - 从 IntelliJ 中的 "Navigate Files"中排除项目\文件夹

java - 无法解析符号 'Assertions' <-- 尝试在 IntelliJ 中使用 AssertJ 时出现错误消息

java - 如何测量从 Maven 或 intellij 运行的单元测试的启动时间?

java - Tika不输出文档内容

java - 计算数组中每个元素的出现次数,而不是按排序顺序,顺序将按照问题中的要求进行

java - 连续写入文件的最佳方式(每秒 50 次)