java - getResource返回NullPointerException

标签 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”。

但是,当我在使用“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/

相关文章:

java - 实时Java图形/图表库?

maven - mavenDeployer没有使用变量值

java - 如何从 maven SNAPSHOT 存储库下载 SNAPSHOT 版本?

java - 公共(public)假期检查器(英国)

scala - 更正Gradle中Scala库的artifactID

qt - 打开/编辑 Qt 资源文件 (.rcc)

Android studio 编译错误 "Content is not allowed in prolog"

java - 如何加载资源文件夹(maven)内的 keystore ?

java - 如何删除 java 中未经检查的强制转换警告?

android - 没有找到类 rx.android.schedulers.AndroidSchedulers