如何在IntelliJ中将资源文件添加到JAR包

14

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

我想将layout.txt和saveddata.txt添加到可执行的JAR文件中。我已经在Google上搜索了一段时间,但找不到解决方法。

如果你需要看我的代码,这是我读取文件的方式。

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

这是我的项目结构

布局结构

4个回答

17
  1. 在与"src"同一层级下创建名为"resources"的文件夹
  2. 右键点击该文件夹,选择"标记目录为->资源根目录"

enter image description here


1
仍然给我NoSuchFileException。我将其标记为资源根目录。 - Vincent Paing
3
假设您的应用程序给出了NSFE错误。如果是这样,请发布您的代码以提问。通用格式为getClass().getResource("/path/image.png") - Brian Topping
我已经添加了代码。你能再检查一遍吗?谢谢 :D - Vincent Paing
1
尝试在路径前面加上“/”,并删除文件夹“resources”。构建中您的资源文件夹内容被视为根目录,因此您的资源路径将是 "/layout.txt" - Brian Topping
我已经尝试将其放置在根目录中。它也没有添加到JAR文件中。 - Vincent Paing
显示剩余3条评论

5
  • 在您的项目根目录下创建名为“resources”的新目录。
  • 右键单击该目录,选择“标记目录为”==>“资源根目录”选项。

重建后仍然出现NoSuchFileException异常。 - Vincent Paing
@Renges:该代码使用相对路径,这使它依赖于启动测试的JVM的当前工作目录。读取资源文件的更可靠方法是“getClass().getClassLoader().getResourceAsStream()”,或者如果必要的话,“getClass().getClassLoader().getResource()”。在J2EE环境中,通常会使用“Thread.currentThread().getContextClassLoader().getResourceAsStream()”。 - Ranjeet
@Ranjeet,我认为getClassLoader().getResourceAsStream是正确的方法。你能否编辑你的答案并详细说明一下?谢谢。 - 0x90

1

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

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

enter image description here


0

这还是属于我。我尝试过:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接