【问题标题】:How to create correct resource file path in a java jar file如何在 java jar 文件中创建正确的资源文件路径
【发布时间】:2018-12-18 18:11:13
【问题描述】:

坐在这里有一个更大的 java 项目(对于一年级软件学生)在创建正确的资源文件路径时遇到了一些麻烦。

我现在有 .txt、.png、.jpg 和 .gif 格式的文件。

现在我使用这样的路径来查找文本文件:

File userFile = new File("Source Code/files/users.txt");

或者像这样的路径来创建在我的 FX 代码中加载的图像:

File logoPath = new File("Source code/files/graphics/Streamy_logo.png");
Image logoImage = new Image(logoPath.toURI().toString());
logo.setImage(logoImage);

这在我的 IDE (IntelliJ) 中运行良好,但是当我将项目创建为 Jar 文件时它不起作用。 我认为这与 jar 文件中未创建的“源代码”目录有关,现在这很有意义。

尝试阅读不同的主题,但如果我应该使用 getResources 方法、设置 resourceStream 或其他东西,这似乎有点不同。

谁能帮我解决这个问题。 谢谢!

【问题讨论】:

  • 不,没有什么不同。当资源在 jar 中时,使用 File 将永远无法工作。
  • 我应该改用什么?
  • 始终使用 Class.getResource。如果它不起作用,请确保您的项目将 files 中的所有内容打包到您的 .jar 中。

标签: java intellij-idea jar


【解决方案1】:

您不能在 .jar 文件中加载这样的文件,这里有一个关于如何读取 BufferedImages 的示例。 但首先,请确保您已将资源文件夹标记为 IntelliJ 中的资源文件夹,方法是右键单击项目视图中的文件夹并向下到“将目录标记为”并检查资源根目录。

    BufferedImage exampleBlock = null;
    try {
        exampleBlock = ImageIO.read(ClassLoader.getSystemResource("exampleBlock.png"));
    } catch (IOException e) {
        e.printStackTrace();
    }

通过使用这种获取文件的方法,您的所有文件都将被实现为 .jar 文件,您可以通过调用它们的文件名+扩展名来使用它们

【讨论】:

    【解决方案2】:

    对于 maven 或 gradle 项目,尊重 maven 目录约定,您可以简单地使用

    getClass().getResource("/your_file_located_in_src_main_resources.extension").getPath()
    

    【讨论】:

      猜你喜欢
      • 2010-10-30
      • 2011-04-25
      • 1970-01-01
      • 2021-12-21
      • 2011-06-03
      • 1970-01-01
      • 2016-09-20
      • 2016-12-25
      • 2010-09-29
      相关资源
      最近更新 更多