【问题标题】:"URI is not hierarchical" when loading resource加载资源时“URI 不是分层的”
【发布时间】:2014-08-23 19:17:43
【问题描述】:

我需要一个文件的 URI(我把它放在资源目录中)。如果我使用

MyClass.class.getClassLoader().getResource(resource)

我明白了

java.lang.IllegalArgumentException: URI is not hierarchical

否则,如果我使用ClassLoader.getSystemResource(resource),它会返回null

【问题讨论】:

  • 你能提供你正在使用的URI吗?
  • file:/Users/user1/Library/Caches/IntelliJIdea14/plugins-sandbox/plugins/plugin/classes/disconnected.png 这是我从 IDE 运行时得到的 URI。它运行正常。但是当我生成一个 jar 并尝试运行它时,它失败了。
  • 试试new File(MyClass.class.getResource(resource).getPath()).toURI()new File(MyClass.class.getClassLoader().getResource(resource).getPath()).toURI()
  • 它应该是相对于 jar 文件的顶层,而不是绝对路径名。另外,我不确定您是否需要“文件:”前缀。
  • 我不能。如何将输入流转换为文件/uri?

标签: java resources uri classloader illegalargumentexception


【解决方案1】:

您是从 jar 中加载文件吗?如果是这样,则操作系统无法从 jar 中形成 java File 实例。为了能够加载它,请尝试将其作为流打开。 “filepath”应以“/”开头。

MyClass.class.getClass().getResourceAsStream( filepath );

【讨论】:

    【解决方案2】:

    你应该使用

    getResourceAsStream(...);

    当资源被捆绑为 jar/war 或任何其他单个文件包时。

    看问题是,一个 jar 是一个包含许多文件的单个文件(有点像 zip 文件)。从 Os 的 pov 来看,它是一个文件,如果您想访问文件的一部分(您的图像文件),您必须将其用作流。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      • 2013-05-14
      • 1970-01-01
      • 2014-08-16
      • 1970-01-01
      • 2014-02-05
      • 1970-01-01
      相关资源
      最近更新 更多