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
文件夹?
非常感谢任何帮助!
答案 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类