首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 计算机考试 > 认证考试 > JAVA认证 >

在目录中查找类位于哪个jar包中

2008-10-05 
做Java开发的人可能都遇到过面对一大堆的jar包但是自己不知道需要的那些个类到底位于哪个jar包中, ...
Java开发的人可能都遇到过面对一大堆的jar包但是自己不知道需要的那些个类到底位于哪个jar包中,使用下面的代码,这个问题就可以迎刃而解了。
import java.io.file;
import java.util.arraylist;
import java.util.enumeration;
import java.util.list;
import java.util.zip.zipentry;
import java.util.zip.zipfile;

public class findinjar {
public string classname;

public arraylist jarfiles = new arraylist();

public findinjar() {
}

public findinjar(string classname) {
this.classname = classname;
}

public void setclassname(string classname) {
this.classname = classname;
}

public list findclass(string dir, boolean recurse) {
searchdir(dir, recurse);
return this.jarfiles;
}

protected void searchdir(string dir, boolean recurse) {
try {
file d = new file(dir);
if (!d.isdirectory()) {
return;
}
file[] files = d.listfiles();
for (int i = 0; i < files.length; i ) {
if (recurse && files[i].isdirectory()) {
searchdir(files[i].getabsolutepath(), true);
} else {
string filename = files[i].getabsolutepath();
if (filename.endswith(".jar")||filename.endswith(".zip")) {
zipfile zip = new zipfile(filename);
enumeration entries = zip.entries();
while (entries.hasmoreelements()) {
zipentry entry = (zipentry) entries.nextelement();
string thisclassname = getclassname(entry);
if (thisclassname.equals(this.classname) || thisclassname.equals(this.classname ".class")) {
this.jarfiles.add(filename);
}
}
}
}
}
} catch (exception e) {
e.printstacktrace();
}
}

public list getfilenames() {
return this.jarfiles;
}

protected string getclassname(zipentry entry) {
stringbuffer classname = new stringbuffer(entry.getname().replace(’/', ‘.’));
return classname.tostring();
}

public static void main(string args[]) {
findinjar findinjar = new findinjar("javax.mail.session");
list jarfiles = findinjar.findclass("d:/libs/", true);
if (jarfiles.size() == 0) {
system.out.println("not found");
} else {
for (int i = 0; i < jarfiles.size(); i ) {
system.out.println(jarfiles.get(i));
}
}
}
}

main方法中的findclass方法的第二个参数是是否对指定的目录递归进行处理,一般都会要这样做的吧。