【问题标题】:How to add resource file to JAR in IntelliJ如何在 IntelliJ 中将资源文件添加到 JAR
【发布时间】:2015-04-27 05:00:27
【问题描述】:

我正在使用 IntelliJ IDEA 14,我想将 src 之外的文件添加到 JAR 文件中。这是我目前的项目结构。

我想将 layout.txt 和 saveddata.txt 添加到 JAR 文件可执行文件中。找了好久没找到解决办法

如果您需要查看我的代码。这就是我阅读文件的方式

private Path layoutPath = Paths.get("resources/layout.txt");
content = new String(Files.readAllBytes(layoutPath));

这是我的项目结构

【问题讨论】:

    标签: java intellij-idea


    【解决方案1】:
    1. 在与“src”同级创建一个名为“resources”的文件夹
    2. 右键文件夹,选择“将目录标记为->资源根”

    【讨论】:

    • 仍然给我 NoSuchFileException。我将其标记为资源根。
    • 大概你的意思是你的应用程序给你一个NSFE。如果是这样,请单独提出问题,请发布您的代码。一般形式为getClass().getResource("/path/image.png")。
    • 我已经添加了代码。你能再检查一遍吗?谢谢:D
    • 尝试在路径前添加一个“/”并删除文件夹“resources”。构建中资源文件夹的内容被视为根目录,因此您的资源路径将是 "/layout.txt"。
    • 我已经尝试放入根目录。它也不会添加到 JAR 文件中
    【解决方案2】:
    • 在您的项目根目录下创建名为“resources”的新目录。
    • 右键单击该目录并选择“将目录标记为”==>“资源根”选项。

    【讨论】:

    • 重建后仍然给我 NoSuchFileException
    • @Renges :代码使用相对路径,这使得它依赖于启动测试的 JVM 的当前工作目录。读取资源文件的更可靠方法是“getClass().getClassLoader().getResourceAsStream()”,或者,如果需要,可以使用“getClass().getClassLoader().getResource()”。在 J2EE 环境中,您通常会使用 'Thread.currentThread().getContextClassLoader().getResourceAsStream()'。
    • @Ranjeet,我认为getClassLoader().getResourceAsStream 是正确的选择。您能否编辑您的答案并详细说明?谢谢。
    【解决方案3】:

    它仍然适合我。我试过了:

    + "Mark Directory As" ==>"Resources Root"
    + getClassLoader().getResourceAsStream()
    + getClass().getClassLoader().getResource()
    and Thread.currentThread().getContextClassLoader().getResourceAsStream()
    

    【讨论】:

      【解决方案4】:

      对我来说,resources 目录已标记为 Resources Root,但 jar 中的内容缺失。我必须使用Project Structure 窗口手动将resources 目录添加到jar 工件。

      1. 打开Project Structures窗口
      2. 选择Artifacts并单击+按钮,然后选择Directory Content
      3. 选择resources目录
      4. 按Apply,然后按OK

      【讨论】:

        猜你喜欢
        • 2011-10-26
        • 2012-08-03
        • 2015-04-15
        • 2018-11-18
        • 2013-05-14
        • 1970-01-01
        • 2016-08-27
        • 2011-04-26
        • 1970-01-01
        相关资源
        最近更新 更多