我在通过Maven构建项目时遇到了这个奇怪的问题。
这是我用于阅读文本文件的代码,我将其放在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)
答案 0 :(得分:0)
您should use使用正斜杠作为资源路径的分隔符,因此请尝试em
类加载器负责解释路径并查找资源。在文件系统中搜索资源时,带有反斜杠的路径似乎在Windows中有效,可能是因为它很简单地解释为相对路径。
当请求JAR文件中的资源时,这样的路径不起作用,因为JAR条目的格式需要正斜杠作为分隔符char。