利用Java查询Jar包内的驱动类名

关键字:Java、Jar、驱动名称、driver classname、Eclipse插件、DB browser

最近在开发一个Eclipse插件,插件功能之一就是有个像 Myeclipse的DB Browser那样的数据库参数配置面板,现在功能已基本实现laugh   贴图一张

开发过程中有个查找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
Back to Top