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

时间:2014-05-11 21:03:11

标签: 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的行。

我在这里看到了非常相似的问题,但没有任何结果,因为我测试了它(喜欢尝试使用classloader )。谁有指针?

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

1 个答案:

答案 0 :(得分:0)

A检查:只需用7zip左右打开jar(ziip格式)即可。文件名应区分大小写(而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")