服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > JDK > 查看文档

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

作者: cherami

    做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方法的第二个参数是是否对指定的目录递归进行处理,一般都会要这样做的吧。

原文地址:http://www.jiehoo.com/find-jar-through-class-name.htm

扫描关注微信公众号