计算机二级辅导:利用Java查询Jar包内的驱动类名
发布时间:2010/3/13 9:29:41 来源:城市学习网 编辑:MOON
最近在开发一个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(ListString 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) {
ListString l = new ArrayListString();
File fs = new File("D:““My Projects““Database drivers““sql2005jdbc.jar");
fillDriverName(l, fs);
System.out.println(l);
}
}
: