尝试打开jar文件时出现java ZipException
当我试图打开一个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文件的内容。有什么想法吗
# 1 楼答案
我已经找到了解决这个问题的办法。
replaceAll("(!|file:\\\\)", "");
位没有按预期工作,因为“文件:”位没有被替换。我现在将开始寻找原因,并完成这个答案