一个用于在一堆zip/jar文件中查找某一个类的程序

作者: sonymusic
标题: 一个用于在一堆zip/jar文件中查找某一个类的程序
关键字: Java Zip 查找
分类: 示例代码
密级: 公开
(评分: , 回复: 0, 阅读: 142) »»

可随意转载,但请注明出处及作者
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;
   }
 };
}


posted on 2004-12-14 22:50  笨笨  阅读(1476)  评论(1编辑  收藏  举报

导航