Java查询Jar包内的驱动类名
来源:优易学  2011-12-17 15:44:39   【优易学:中国教育考试门户网】   资料下载   IT书店

  最近在开发一个Eclipse插件,插件功能之一就是有个像Myeclipse的DB Browser那样的数据库参数配置面板,开发过程中有个查找Jar包内数据库驱动名称的小技巧,特此跟大家分享一下--->>>

  Java程序源码:

  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<String> 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<String> l = new ArrayList<String>();

  File fs = new File("D:\\My Projects\\Database drivers\\sql2005jdbc.jar");

  fillDriverName(l, fs);

  System.out.println(l);

  }

  }

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训