java查找类在哪个jar 您所在的位置:网站首页 class类在哪个包中 java查找类在哪个jar

java查找类在哪个jar

2024-01-25 09:11| 来源: 网络整理| 查看: 265

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有