尝试打开jar文件时出现ZipException

时间:2014-02-18 22:27:16

标签: java jar

当我尝试打开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 个答案:

答案 0 :(得分:0)

我找到了问题的解决方案。由于“file:”位未被替换,replaceAll("(!|file:\\\\)", "");位未按预期工作。我现在将开始寻找原因,并完成这个答案。