我试图获取两个名为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"
但是当我在编译的jar中运行它时,用#34; gradle build"构建它,它只是不起作用,并返回一个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中: 我无法再提供任何链接了。
提前致谢, 萨沙。
答案 0 :(得分:0)
似乎没有将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);
}