getResource返回NullPointerException

时间:2016-01-30 22:18:53

标签: java gradle resources

我试图获取两个名为config.ymlmessages.yml的资源文件,但它无效。我创建了一个项目来测试text.txt中名为resources/files/test.txt的文件。

像这样:
enter image description here

我的代码是:

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中: 我无法再提供任何链接了。

提前致谢, 萨沙。

1 个答案:

答案 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);
}