ClassFinder小程序。。。 搜索class在哪个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 ClassFinder {

public String className;

public List<String> jarFiles = new ArrayList<String>();

public ClassFinder() {

}

public ClassFinder(String className) {

this.className = className;

}

public void setClassName(String className) {

this.className = className;

}

/**

* Return the list of dir

*

* @param dir

* the directory to find

* @param recurse

* whether recurse

* @return

*/

public List<String> findClass(String dir, boolean recurse) {

searchDir(dir, recurse);

return this.jarFiles;

}

private int count = 0;

protected void searchDir(String dir, boolean recurse) {

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 = "";

try {

filename = files[i].getAbsolutePath();

// System.out.println("filename is: " + filename);

if (filename.endsWith(".jar") || filename.endsWith(".zip")) {

count++;

if (count % 100 == 0) {

System.out.println("search files:" + count);

}

ZipFile zip = new ZipFile(filename);

Enumeration<? extends ZipEntry> entries = zip.entries();

while (entries.hasMoreElements()) {

ZipEntry entry = (ZipEntry) entries.nextElement();

String thisClassName = getClassName(entry);

// System.out.println(thisClassName);

if (thisClassName.equals(this.className)

|| thisClassName.equals(this.className

+ ".class")

|| thisClassName.endsWith(className)

|| thisClassName.endsWith(className

+ ".class")) {

this.jarFiles.add(filename);

}

}

} else {

if (filename.equals(this.className)

|| filename.equals(this.className

+ ".class")

|| filename.endsWith(className)

|| filename.endsWith(className

+ ".class")) {

this.jarFiles.add(filename);

}

}

} catch (Exception e) {

System.out.println("this one is not good:" + filename);

e.printStackTrace();

}

}

}

}

public List<String> getFilenames() {

return this.jarFiles;

}

protected String getClassName(ZipEntry entry) {

StringBuffer className = new StringBuffer(entry.getName().replace('/',

'.'));

return className.toString();

}

public static final String PLUG_IN_PATH = "C:\\";

public static void main(String args[]) {

ClassFinder findInJar = new ClassFinder("NwTrace");

List<String> jarFiles = findInJar.findClass(PLUG_IN_PATH, true);

System.out.println(findInJar.className);

if (jarFiles.size() == 0) {

System.out.println("Not Found");

} else {

for (int i = 0; i < jarFiles.size(); i++) {

System.out.println(jarFiles.get(i).replace('\\', '/'));

}

}

}

}