有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

尝试打开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) 个答案

  1. # 1 楼答案

    我已经找到了解决这个问题的办法。replaceAll("(!|file:\\\\)", "");位没有按预期工作,因为“文件:”位没有被替换。我现在将开始寻找原因,并完成这个答案