可随意转载,但请注明出处及作者
SonyMusic
2003.05.28
==========================================================================
一个用于在一堆zip/jar文件中查找某一个类的程序
package sony.utils;
import java.util.jar.*;
import java.util.zip.*;
import java.util.*;
import java.io.*;
/**
* @author SonyMusic
*
* 很简单,但可能会很有用的程序,用于在指定目录下的所有zip/jar文件中查找某个类.<br>
* 至少我觉得是用的,呵呵。有时面对着jrun那一堆.jar文件中,想找到某个类还真不容易。<br>
* <b>usage:</b> java sony.utils.FindClass baseDir className
*/
public class FindClass {
public static void main(String[] args) {
if(args.length!=2){
printUseage(-1);
return;
}
File base=new File(args[0]);
if(!base.exists()){
System.out.println("Base Dir not exist!");
printUseage(-2);
}
if(!base.isDirectory()){
System.out.println("Base Dir is a file!");
printUseage(-3);
}
List zipList=getSubJarFiles(base);
ZipFile zfile=null;
try {
int fCount=0;
for (int i = 0; i <zipList.size(); i++) {
zfile=new ZipFile((File)zipList.get(i));
Enumeration enum=zfile.entries();
while (enum.hasMoreElements()) {
ZipEntry ze = (ZipEntry) enum.nextElement();
if(matchEntry(ze, args[1])){
System.out.println("Found in zip/jar file: "+zfile.getName()+"\tFileName:"+ze.getName());
++fCount;
break;
}
}
}
if(fCount==0){
System.out.println("not found. maybe BaseDir or ClassName is not correct.");
printUseage(0);
}
else{
System.out.println("Found "+fCount+" zip/jar file(s)");
}
}
catch (Exception e) {
e.printStackTrace();
printUseage(-10);
}
}
private static void printUseage(int retStatus){
System.out.println("useage: java sony.utils.FindClass baseDir className");
System.out.println("\tbaseDir: where you want to find. e.g. d:\\web\\web-inf\\lib");
System.out.println("\tclassName: waht you want to find. e.g. HttpServlet");
System.out.println();
System.exit(retStatus);
}
private static List getSubJarFiles(File baseDir){
List ret=new ArrayList();
//File base=new File(baseDir);
File[] tmp=baseDir.listFiles(fileFilter);
for (int i = 0; i <tmp.length; i++) {
if(tmp[i].isFile()){
ret.add(tmp[i]);
}
if(tmp[i].isDirectory()){
ret.addAll(getSubJarFiles(tmp[i]));
}
}
return ret;
}
private static boolean matchEntry(ZipEntry ze, String className){
StringTokenizer st=new StringTokenizer(ze.getName(), "/");
String fileName=null;
while (st.hasMoreTokens()) {
fileName=st.nextToken();
}
if(fileName.equals(className+".class")){
return true;
}
else return false;
}
private static FileFilter fileFilter=new FileFilter(){
public boolean accept(File pathname) {
String tmp=pathname.getName().toLowerCase();
if(tmp.endsWith(".jar") || tmp.endsWith(".zip")){
return true;
}
return false;
}
};
}
|