【问题标题】:java, loading of resources fails: unable to resolve file:/my-jar.jar!/folder/my-filejava,资源加载失败:无法解析文件:/my-jar.jar!/folder/my-file
【发布时间】:2014-01-11 10:04:24
【问题描述】:

从我制作的一个java应用程序中,我构建了相应的jar文件。

我把jar文件里的所有资源都复制了。

例如src/main/resources中存在如下资源/folder/my-file,则将其复制到jar中,路径相同。

但是如果我执行jar,资源的加载会失败。

具体来说,它会抛出这样的 IOException

java.io.IOException: 无法解决 "file:/my-jar.jar!/folder/my-file" 作为类路径、文件名或 网址

我应该如何加载资源?

如果我在 Eclipse 中运行 java 应用程序,一切正常,即使资源加载正确。

编辑:

我正在通过以下方式获取资源的路径:

 MyClass.class.getResource("/folder/my-file").getPath();

资源的加载是由外部库完成的,我只需要指定路径即可。

【问题讨论】:

    标签: java eclipse maven jar resources


    【解决方案1】:

    如果你有这样的结构:

    src/main/Begin.java
    src/main/folder/icon.png
    

    在 Begin.java 中试试这个:

      Begin.getClass().getResource("/main/folder/icon.png");
    

    【讨论】:

    • 你试过了吗? main 不会在运行时出现。
    【解决方案2】:

    在那种情况下,我会尝试:

    YourClass.class.getClassLoader().getResourceAsStream("folder/my-file");
    

    这将独立于您的执行环境将InputStream 返回到您的资源。

    【讨论】:

    • 在这种情况下,我会添加一个/,但除此之外,它确实会起作用。
    • 我没有在问题中指定它,但我需要资源的路径,我通过 MyClass.class.getResource("/folder/my-file") 获取它。获取路径();所以我认为你的解决方案不会好,你同意吗?
    • 我不知道您究竟在用您的资源做什么,您是否出于特定原因需要它的路径,还是只需要阅读它?因为如果您只需要阅读它,最直接和解耦的解决方案是通过类加载器访问它并从中获取 InputStream - 不涉及路径或执行依赖的元素
    • 我只需要路径。
    • 但根据您的部署类型(例如,.war),您可能没有该资源的可用路径。请考虑将其部署到您机器中的已知目录(例如,将路径保留在 .properties 文件中)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多