浏览jar内容时,只有meta / inf文件可用

时间:2015-10-23 07:59:51

标签: java jar

我正在尝试从可以从项目的根目录访问的文件夹中读取jar的内容,正确地找到了jar,但是,我的代码只打印了META-INF文件的名称,这里是什么我到目前为止尝试过:

public static void provideClassList(String jarName) {


    List<String> classNames = new ArrayList<String>();
    ZipInputStream zip;
    try {
        zip = new ZipInputStream(new FileInputStream(StaticValues.JARS_PATH.concat(jarName)));
        for (ZipEntry entry = zip.getNextEntry(); entry != null; entry = zip.getNextEntry()) {
           System.out.println(entry);//PRINTS META-INF/
            if (!entry.isDirectory() && entry.getName().endsWith(".class")) {
                String className = entry.getName().replace('/', '.');
                classNames.add(className.substring(0, className.length() - ".class".length()));
            }
            zip.close();
        }

        // explore content (THIS IS ACTUALLY EMPTY)
        for (String className : classNames) {
            try {
                Class<?> clazz = Class.forName(className);
                System.out.println(clazz.getCanonicalName());
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    } catch (FileNotFoundException e1) {
        e1.printStackTrace();
    } catch (IOException ex) {

    }
}

我看不到任何权限问题,我也从控制台手动打开了jar文件,我希望找到的内容就在那里。 这些是我从日食中看到的属性: enter image description here

1 个答案:

答案 0 :(得分:1)

你正在for循环中调用zip.close();,这可能是你只获得jar中第一个条目的原因。将它移到for循环之外,甚至更好,使用try-with-resources语句。

try (FileInputStream fis = new FileInputStream(StaticValues.JARS_PATH.concat(jarName);
     ZipInputStream zip = new ZipInputStream(fis)) {
  // code for iterating goes here
}