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

时间:2018-02-15 09:59:52

标签: java executable-jar

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

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

总共有4个案例我已经解决但到目前为止没有工作,我现在没有想法。

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例在日食中成功运行,如下所述。

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正在运行,没有任何问题引用我创建的resources文件夹中的文件。所以无论我在哪里运行这个jar(windows,linux等),我都需要创建一个resources文件夹并将我的文件放在该文件夹下。现在问题是,是否可以让我的jar引用jar内部的resources文件夹?

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:0)

如果您使用的是Spring:

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

否则:

import com.google.common.io.Resources

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

答案 1 :(得分:0)

获取您的txt文件:

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

放置文件的位置?

在jar的相同位置,例如:

  

的myapp / yourjar.jar

     

的myapp /资源/ README.TXT

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

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

答案 2 :(得分:0)

方法class.getClass().getClassLoader().getResource()可能需要3个前缀:url:classpath:file:每个前缀都会告诉您搜索的基础。如果要在jar中搜索,请使用classpath:前缀。这告诉您的类加载器在类路径中的任何位置搜索。这是一个example如何使用Spring工具处理它。另请参阅Spring中的ResourceLoader