如何使用相对路径而不是绝对路径

斯克尔斯克尔

所以我需要为 Intellij IDEA 插件设置一个图标,但是当我尝试从我的项目中使用new File(relative path)获取这个图标时getClass().getResource(relative path)它找不到文件,只能使用绝对路径。我尝试过以下相对路径:

  1. images/icon.png
  2. resources/images/icon.png
  3. main/resources/images/icon.png
  4. src/main/resources/images/icon.png

图标路径: src/main/resources/images/icon.png

源代码路径: src/main/java/com/timetrack/plugin/MyClass.java

代码:

File file = new File("src/main/resources/images/running.png");
BufferedImage img = ImageIO.read(file);

或者用这个

BufferedImage img = ImageIO.read(getClass().getResource("images/running.png"));

编辑

需要提及的是,我正在使用 Gradle 来构建项目。所以输出目录是这样的:

图标路径build/resources/main/images/icon.png

编译类build/classes/java/main/com/timetrack/plugin/MyClass.class

VGR

您的资源字符串需要以斜杠开头,因为它与您的类不在同一个包中。

转述自getResource 的文档

  • 如果名称以 开头/,则资源的绝对名称是名称后面的部分/
  • 否则,绝对名称的形式为modified_pa​​ckage_name/name,其中 modified_pa​​ckage_name 是/替换为的此类的包名称.

换句话说,假定传递给 Class.getResource 的参数与 Class 本身在同一个包中,除非参数以斜杠开头。

这是因为在应用程序或库中包含资源的正确方法是将它们放在与使用它们的类相同的包目录中。这样做的原因与我们使用包的原因相同。就此而言,这与应用程序不将其所有文件存储在用户的主目录或 中的C:\原因相同:因为存在其他程序选择相同名称并干扰您的程序的真正风险。

Class.getResource 在类路径中搜索所请求的资源。如果您将图标打包为images/running.png,并且库也决定将其图像打包为images/running.png,则 Class.getResource 将搜索类路径并返回它首先找到的任何内容。根据类路径条目的顺序,您会得到错误的图像,或者其他库会。两者本质上是互相踩踏。

另一方面,如果您将图像放置在src/main/resources/com/timetrack/plugin/running.png,则任何其他代码都不太可能使用该包,因此发生冲突的几率很小。并且因为这是最常见的用例,所以以这种方式使用它更容易:您只需使用MyClass.class.getResource("running.png").

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何检查路径是绝对路径还是相对路径

如何使用Python以跨平台方式检查路径是绝对路径还是相对路径?

Java使用相对路径而不是绝对路径

使用Ant执行时使用绝对路径,但不使用相对路径

如何在golang中解析相对路径到绝对路径?

结合绝对路径和相对路径以获得新的绝对路径

如何获取给定相对路径的绝对路径

Java Nio相对路径的绝对路径

给定两个绝对路径,如何找到相对路径?

lcov绝对路径与相对路径

MSBuild:给定绝对路径,如何获取文件的相对路径?

配置webpack使用绝对路径而不是相对路径

使用绝对路径而不是相对路径与JetBrains WebStorm自动导入进行反应

可以空手道从类路径外部使用相对路径而不是绝对路径读取文件

如何在PowerShell中基于相对路径或绝对路径获取绝对路径?

结合绝对路径和相对路径

〜/ Documents是相对路径还是绝对路径?

从绝对路径到相对路径

绝对路径被视为相对路径

从相对路径获取绝对路径

如何从绝对路径和相对路径运行bash脚本

找到具有相对路径但不是绝对路径的文件?(VBS)

如何将绝对路径转换为相对路径?

相对路径与绝对路径Java

根据绝对路径查找相对路径

Browserify 为模块分配相对路径而不是绝对路径

Webpack 相对路径 vs 绝对路径

如何让 Unity 将输出 png 保存到相对路径而不是绝对路径?

如何在 React 或 Next.js 中使用绝对路径而不是相对路径?