无法在可执行 jar 中找到 java 项目 运行 中的文件

Unable to locate a file in java project running in a executable jar

class.getResource(FILE_NAME)class.getClass().getClassLoader().getResource(FILE_NAME) 运行 都完全在我的 eclipse 中,但是相同的代码无法找到 jar 文件中的文件,当 运行 为windows 机器中的可执行 jar。

我浏览了所有可用于此问题的相关链接(好吧,不是完全相同的问题,但 90% 是同步的),寻求解决方案,但没有任何回复来自这些帖子,所以我发布了我的问题作为一个单独的问题希望得到帮助。

我总共 运行 解决了 4 个案例,但 none 到目前为止有效,我现在没有想法了。

class.getClass().getClassLoader().getResource("/resources/readme.txt");
class.getResource("/resources/readme.txt");
class.getClass().getClassLoader().getResource("resources/readme.txt");
class.getResource("resources/readme.txt");

以上所有4个案例中,只有2个案例运行在eclipse中成功,如下所述。

class.getResource("/resources/readme.txt");
class.getClass().getClassLoader().getResource("resources/readme.txt");

其他 2 个案例只是在线程中抛出异常 "main" java.lang.NullPointerException

来到可执行 jar,所有 4 个案例都让我感到震惊 Exception in thread "main" java.lang.NullPointerException

所以我创建了一个名为 resources 的文件夹,我的 jar 位于其中,并将我的文件放在这个文件夹和 运行 jar 中。现在 jar 运行ning 没有任何问题引用我创建的 resources 文件夹中的文件。因此,无论我 运行 这个 jar(windows、linux 等),我都需要创建一个 resources 文件夹并将我的文件放在该文件夹下。现在的问题是,是否可以让我的 jar 引用 jar 本身内的 resources 文件夹?

非常感谢任何帮助!

如果您正在使用 Spring:

org.springframework.util.ResourceUtils.getFile("classpath:readme.txt")

否则:

import com.google.common.io.Resources

byte[] byteSource = Resources.asByteSource(Resources.getResource("readme.txt")).read()

要获取您的 txt 文件:

File yourFileIsHere = new File("resources/readme.txt");

你的文件放在哪里?

在你的 jar 的相同位置,例如:

myapp/yourjar.jar

myapp/resources/readme.txt

如果您想读取“src”文件夹中的文件:

InputStream yourInputStream = new YourClass().getClass().getClassLoader().getResourceAsStream("readme.txt");

方法 class.getClass().getClassLoader().getResource() 可能需要 3 个前缀:url:classpath:file: 每个前缀都说明了您的搜索基础。如果您想在 jar 中搜索,请使用 classpath: 前缀。这会告诉您的 classloader 在您的 classpath 中到处搜索。这是 example how to deal with it with Spring tools. Look also at ResourceLoader class 在 Spring