class.getClassLoader getResourceasStream在jar中返回null

时间:2015-08-22 07:29:22

标签: java maven

我在通过Maven构建项目时遇到了这个奇怪的问题。

enter image description here

这是我用于阅读文本文件的代码,我将其放在Maven项目的resources文件夹下。从IDE运行一切都很好但是一旦我创建了一个jar并从命令行运行,它就会返回null

public static void main(String[] args) throws IOException {
    URL jarUrl = FreeCalcTest.class.getProtectionDomain().getCodeSource().getLocation();
    System.out.println("JarUrl : "+jarUrl);
    String filePath = "UserDetails\\ReadFile.txt";
    URL url = FreeCalcTest.class.getClassLoader().getResource(filePath);
    System.out.println(url);
    InputStream inputStream = FreeCalcTest.class.getClassLoader().getResourceAsStream(filePath);
    UserDetailReader userDetailReader = new UserDetailReader(inputStream);
    List<UserDetailValueSet> userDetails = userDetailReader.read();
    Set<String> attrList =  UserDetailAttributes.getAttributes();
    Iterator<String> attrItr = attrList.iterator();
    Iterator<UserDetailValueSet> itr = userDetails.iterator();
    while (itr.hasNext()) {
        UserDetailValueSet userDetailValueSet = (UserDetailValueSet) itr.next();
        while (attrItr.hasNext()) {
            String attr = (String) attrItr.next();
            System.out.println(userDetailValueSet.getValueSet().get(attr));
        }

    }
}

异常堆栈跟踪:

JarUrl : file:/C:/Users/bnath/Desktop/FreeCalc-0.0.1-SNAPSHOT.jar null
Exception in thread "main" java.lang.NullPointerException
    at java.io.Reader.<init>(Unknown Source) at java.io.InputStreamReader.<init>(Unknown Source)
    at com.sec.io.reader.UserDetailReader.read(UserDetailReader.java:24)
    at com.sec.testFreeCalc.FreeCalcTest.main(FreeCalcTest.java:24)

1 个答案:

答案 0 :(得分:0)

should use使用正斜杠作为资源路径的分隔符,因此请尝试em

类加载器负责解释路径并查找资源。在文件系统中搜索资源时,带有反斜杠的路径似乎在Windows中有效,可能是因为它很简单地解释为相对路径。

当请求JAR文件中的资源时,这样的路径不起作用,因为JAR条目的格式需要正斜杠作为分隔符char。