当前位置: 首页 > 知识库问答 >
问题:

Java classloader无法在jar文件中找到资源

佴普松
2023-03-14

我有一个可运行的jar文件,无法访问位于默认src目录之外的资源。根据我的理解,这两门课的区别是什么。getResource()和ClassLoader。getResource(),我应该能够访问root/res/img/img1。png(请参阅下面的文件夹设置),方法是使用以下getResourceFile函数

public class Foo {

    private static final ClassLoader CLASS_LOADER = Foo.class.getClassLoader();

    public static File getResourceFile(String relativePath) {
        // Since I'm using getClassLoader, the path will resolve starting from 
        // the root of the classpath and it'll take an absolute resource name
        // usage: getResourceFile("img/img1.png")
        // result: Exception in thread "main" java.lang.NullPointerException
        return new File(CLASS_LOADER.getResource(relativePath).getFile());
    }
}

文件夹设置:

root/
    src/
        foo/
            bar/
    res/
        img/
            img1.png
        audio/
            audio1.wav

当我尝试执行jar可执行文件本身时,问题就出现了。然而,奇怪的是,我无法通过eclipse IDE复制它,它实际上能够正确解析路径。我已通过(Project-

在生成jar文件方面我是否缺少什么?解压jar文件时,img和音频目录位于根目录中(给定上述初始文件夹设置),一切似乎都井然有序:

foo/
    /bar
img/
    img1.png
audio/
    audio1.wav

共有1个答案

阴焱
2023-03-14

文件只能用于表示文件系统中的实际文件。一旦您将文件打包到JAR中,资源(img/img1.png)就不再是一个文件,而是JAR文件中的一个条目。只要您使用Eclipse中的文件夹结构,资源都是单独的文件,所以一切都很好。

尝试以下操作:

System.out.println(CLASS_LOADER.getResource(relativePath));

它将打印一个URL,但它不是指向文件系统中文件的有效路径,而是指向JAR文件中的条目。

通常,您只想读取资源。在这种情况下,使用getResourceAsStream()打开InputStream

 类似资料:
  • 我很难弄清楚这个问题,我几乎什么都试过了。 我希望我的程序从Jar文件中读取两个资源,并且它将在eclipse中运行良好。但是当我从命令提示符运行jar时,它会给出空指针异常。 结构: src/main/java/App。JAVA src/main/resources/properties/application。属性 src/main/resources/spring/applicationCo

  • 我的项目结构 我能够生成JAR文件。并尝试从JAR文件位置执行以下命令 我得到下面的错误 注意:我知道这是重复的问题,但我已经通过了与此相关的所有过去的stackoverflow问题,但遗憾的是没有运气!

  • 问题内容: 我在 项目根文件夹中* 有 hibernate.cfg.xml 文件。 * 如果我运行的应用程序包含: 它在方法中崩溃并显示以下消息: 无法找到cfg.xml资源[hibernate.cfg.xml] 输出 : 问题答案: 该 hibernate.cfg.xml的 文件应该被移动到 SRC 文件夹中。

  • 我正在做一个项目,编译并运行我的IDE工作正常。所有资源都找到了,它正常工作。然而,当我构建我的. jar时,它能够找到一些资源,但不是全部。我的项目结构看起来是这样的: 当我运行jar文件时,它能够找到图像并使用它们,但是当我尝试访问html文件时,它不会打开。下面是jar的项目结构; 我以前从未处理过jar文件,所以这似乎是我犯的一个非常明显的错误。感谢您的帮助,谢谢! 编辑:访问找不到的文件

  • 我使用的是NetBeans IDE 8.2。这是我正在使用的代码: 加载到cats阵列中的图像位于名为“img”的src文件夹中,编号为1-6。当我从NetBeans IDE运行程序时,它运行得非常完美;然而,当我试图在构建项目后创建的dist文件夹中执行JAR文件时,它根本不会运行。当我尝试使用命令行运行它时,我得到以下结果: 我假设问题是JAR文件无法访问图像文件,但我不知道如何修复它。如何将

  • 我的身材。gradle文件,我使用的是kapt,而不是java的注释处理器 exportSchema设置为true的My RoomDatase基类 数据库方案get已导出并保存为json文件[1]:https://i.stack.imgur.com/r3Iew.png 但我的迁移测试还是会出错 我已经尝试了这里的所有stackoverflow解决方案,如: