/** * @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; }