Java jar 在 maven 资源文件夹中找不到文件

标签 java eclipse maven nullpointerexception invocationtargetexception

我使用 maven,并且在名为 src/main/resources 的源文件夹中有一个文本文件 当我尝试从本地系统上的文件夹中加载文件时,它运行良好

BufferedReader reader = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream("/stopwords_german.txt")));

但是一旦我在 Eclipse 中将项目导出为 Runnable Jar 并在我的服务器上启动该 jar,我就会收到 Nullpointer 异常

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:622)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.NullPointerException
    at java.io.Reader.<init>(Reader.java:78)
    at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
    at de.test.dataminer.helper.FilterText.initStopwords(FilterText.java:43)

这是带有 BufferedReader 的行。

我在这里看到了非常类似的问题,但没有任何结果,因此我测试修复它(喜欢尝试使用类加载器)。有人指点一下吗?

    <resources>
      <resource>
        <directory>/home/johnny/workspace/dataminer/src/main/resources</directory>
      </resource>
    </resources>

最佳答案

检查:只需用 7zip 左右打开 jar(zip 格式)即可。文件名应区分大小写(而 Windows 不区分大小写)。这也可以通过在 IDE 外部运行 jar 来测试。

备注:将编码添加到InputStreamReader,否则将采用当前操作系统编码 - 不可移植。

BufferedReader reader = new BufferedReader(
        new InputStreamReader(
            this.getClass().getResourceAsStream("/stopwords_german.txt"),
            "Cp1252"));

如果一切都合适,仍然可能会出现问题:getClass() 可能是(可能通过继承)jar 之外的某个类。然后,您可以执行类似 SomeClassInJar.class.getResource 的操作,或者使用前面不带斜杠的 ClassLoader.getResourceAsStrean("stopwords_german.txt")

关于Java jar 在 maven 资源文件夹中找不到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23597898/

相关文章:

java - 将Jlabel添加到java小程序中

c++ - Eclipse 未关闭以前的构建 CPU 使用率 100%

java - 通过 Maven 生成 UUID

Java 类加载器和 getResourceAsStream

java - Intellij IDEA错误: Could not find or load main class test

java - 如何使用 cassandra session 进行多线程?

java - 如何使用可分页参数定义请求方向?

eclipse - 打印/复制带有颜色突出显示的 LogCat 输出?

java - 'java.lang.AssertionError : assertion failed' Error while starting Scala-IDE(Eclipse)

java - NoSuchMethodError : scala. Predef$.$conforms()Lscala/Predef$$less$冒号$less