我正在尝试获取两个名为config.yml
和messages.yml
的资源文件,但是它不起作用。我做了一个项目,仅使用位于text.txt
中的resources/files/test.txt
文件进行测试。
像这样:
我的代码是:
package be.isach.tests;
import java.io.File;
public class Test {
public static void main(String[] args) {
Test obj = new Test();
for(File file : obj.getFile("files/").listFiles())
System.out.println(file.getName());
}
private File getFile(String fileName) {
ClassLoader classLoader = getClass().getClassLoader();
return new File(classLoader.getResource(fileName).getFile());
}
}
当我从IDE(IntelliJ IDEA)运行它时,它运行良好并打印:
“test.txt”。
但是,当我在使用“gradle build”构建的已编译jar中运行它时,它不起作用,并返回了NPE:
Exception in thread "main" java.lang.NullPointerException
at be.isach.tests.Test.main(Test.java:12)
这是我的
build.gradle
(外部链接不要有太大的疑问),它是否可以解决所有问题:http://pastebin.com/gY4NPx8t
我尝试了很多事情,例如;
Thread.currentThread()
等。我在互联网上搜索了2个多小时,但没有发现任何有效的方法。如果您想知道,是的,它将资源放入了Jar中:
我再也不能放链接了。
提前致谢,
萨莎
最佳答案
似乎没有将resources
放入已编译的JAR中。您可以打开JAR文件并检查files
目录及其中的文本文件是否存在?
如果没有,那么您将需要更改Gradle脚本以开始将资源放入已编译的JAR中。
另外,请尝试使用/
前缀路径,以访问根目录中的资源。如果您不这样做,那么您只是在查看相对于当前软件包的软件包级别。
进行如下更改:
obj.getFile("/files").listFiles()
另外,将
getResource()
方法更改为getResourceAsStream()
,如下所示:private InputStream getFile(String fileName) {
ClassLoader classLoader = getClass().getClassLoader();
return classLoader.getResourceAsStream(fileName);
}
关于java - getResource返回NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35107872/