最近在开发一个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);
}
}
责任编辑:小草