以编程方式分析jar文件

以编程方式分析jar文件,第1张

以编程方式分析jar文件

jar文件是具有特定模式的zip文件。您可以使用ZipFile和ZipEntry或其子类JarFile和JarEntry。

此代码(自定义类加载器的方法)将返回一个Map,其中包含您需要的每种“类”类型的数组

public Map<String, List<Class<?>>> loadAndScanJar(File jarFile)        throws ClassNotFoundException, ZipException, IOException {    // Load the jar file into the JVM    // You can remove this if the jar file already loaded.    super.addURL(jarFile.toURI().toURL());    Map<String, List<Class<?>>> classes = new HashMap<String, List<Class<?>>>();    List<Class<?>> interfaces = new ArrayList<Class<?>>();    List<Class<?>> clazzes = new ArrayList<Class<?>>();    List<Class<?>> enums = new ArrayList<Class<?>>();    List<Class<?>> annotations = new ArrayList<Class<?>>();    classes.put("interfaces", interfaces);    classes.put("classes", clazzes);    classes.put("annotations", annotations);    classes.put("enums", enums);    // Count the classes loaded    int count = 0;    // Your jar file    JarFile jar = new JarFile(jarFile);    // Getting the files into the jar    Enumeration<? extends JarEntry> enumeration = jar.entries();    // Iterates into the files in the jar file    while (enumeration.hasMoreElements()) {        ZipEntry zipEntry = enumeration.nextElement();        // Is this a class?        if (zipEntry.getName().endsWith(".class")) { // Relative path of file into the jar. String className = zipEntry.getName(); // Complete class name className = className.replace(".class", "").replace("/", "."); // Load class definition from JVM Class<?> clazz = this.loadClass(className); try {     // Verify the type of the "class"     if (clazz.isInterface()) {         interfaces.add(clazz);     } else if (clazz.isAnnotation()) {         annotations.add(clazz);     } else if (clazz.isEnum()) {         enums.add(clazz);     } else {         clazzes.add(clazz);     }     count++; } catch (ClassCastException e) { }        }    }    System.out.println("Total: " + count);    return classes;}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5427002.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存