利用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
