当我尝试打开jar文件时,我一直收到java.util.zip.ZipException
。我能够使用以下精简代码重现该问题(忽略奇怪的populateSamples()
方法名称):
import java.io.File;
import java.util.jar.JarFile;
public class Test {
public static void main(String[] args) {
Test test = new Test();
test.populateSamples();
}
private void populateSamples() {
JarFile jf = null;
try {
String s = new File(this.getClass().getResource("Test.class").getPath()).getParent().replaceAll("(!|file:\\\\)", "");
jf = new JarFile(s);
} catch(IOException e) {
e.printStackTrace();
} finally {
try {
jf.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
}
以下是我得到的例外情况:
$ java -jar EclipseTest.jar
java.util.zip.ZipException: error in opening zip file
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:128)
at java.util.jar.JarFile.<init>(JarFile.java:136)
at java.util.jar.JarFile.<init>(JarFile.java:73)
at Test.populateSamples(Test.java:40)
at Test.main(Test.java:17)
java.lang.NullPointerException
at Test.populateSamples(Test.java:54)
at Test.main(Test.java:17)
我可以用jar tf
列出jar文件的内容就好了。有什么想法吗?
答案 0 :(得分:0)
我找到了问题的解决方案。由于“file:”位未被替换,replaceAll("(!|file:\\\\)", "");
位未按预期工作。我现在将开始寻找原因,并完成这个答案。