利用Java查询Jar包内的驱动类名
关键字:Java、Jar、驱动名称、driver classname、Eclipse插件、DB browser
最近在开发一个Eclipse插件,插件功能之一就是有个像 Myeclipse的DB Browser那样的数据库参数配置面板,现在功能已基本实现 贴图一张
开发过程中有个查找Jar包内数据库驱动名称的小技巧,这里跟大家分享一下—>>>
import java.io.File; import java.lang.reflect.Modifier; import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; public class MyUtil { /** * @param l target class name list * @param f Jar File[] */ public static void fillDriverName(List l,File... fs){ for(File f:fs){ if(f.getName().endsWith(".zip")||f.getName().endsWith(".jar")){ try{ URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{f.toURL()}); ZipFile zip = new ZipFile(f); Enumeration enumZip = zip.entries(); String className; String tempName; while(enumZip.hasMoreElements()){ ZipEntry entry = (ZipEntry) enumZip.nextElement(); if(!entry.isDirectory()){ if((tempName = entry.getName()).endsWith(".class") && tempName.indexOf("$")==-1){ //将驱动类路径中的/替换成. className = tempName.substring(0,tempName.lastIndexOf(".class")).replaceAll("/", "."); if(!"".equals(className)){ Class c = null; c = urlClassLoader.loadClass(className); if(java.sql.Driver.class.isAssignableFrom(c)//判断驱动类是java.sql.Driver的子类 &&!Modifier.isAbstract( c.getModifiers( ))){//判断驱动类是否为一个抽象类 l.add(className); } } } } } }catch(Exception e){}catch(Error ex){} } } } public static void main(String[] args) { List l = new ArrayList(); File fs = new File("D:\\mssqlserver.jar"); fillDriverName(l, fs); System.out.println(l); } }http://xzh.i3geek.com