欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

搜索Jar包中的类或包,jar包中,有没有从N个Jar包中搜

来源: javaer 分享于  点击 42787 次 点评:270

搜索Jar包中的类或包,jar包中,有没有从N个Jar包中搜


有没有从N个Jar包中搜索某个类的场景?这段代码支持目录递归和模糊搜索。参考: http://www.iteye.com/topic/445975

import java.io.File;import java.io.IOException;import java.util.Enumeration;import java.util.jar.JarEntry;import java.util.jar.JarFile;public class FindClassFromJars      /**     * 查询格式:[查询参数] [关键字..]<br/>     * 查询参数:--help:显示"软件帮助信息";<br/>     *  查询级别{0,1}(默认为3):     *  <li>0:完全匹配;</li>     *  <li>1:忽略大小写的完全匹配;</li>     *  <li>2:模糊匹配;</li>     *  <li>3:忽略大小写的模糊匹配.</li>     * @param keys     */    public static void findKey(String[] keys) {//未考虑将参数写在最后        int length = keys.length;        int level = 3;        File file = new File(".");        if(length == 0)            showHelp();        if(length == 1)            if("--help".equalsIgnoreCase(keys[0]) || "/?".equalsIgnoreCase(keys[0]))                showHelp();            else                findKey(keys, 3, file);        if (length > 1)            try {                level = Integer.parseInt(keys[0]);//转换搜索级别                findKey(keys, level, file);            } catch (NumberFormatException e) {//转换异常,没有输入搜索级别时                if (!"--help".equalsIgnoreCase(keys[0]) && !"/?".equalsIgnoreCase(keys[0]))                    findKey(keys, level, file);                else                    showHelp();            }    }    private static void showHelp() {        System.out.println("查询格式:[查询参数] [关键字..]\\n查询参数:--help:显示\\"软件帮助信息\\";\\n查询级别{0,1,2,3}(默认为3):\\n0:完全匹配;\\n1:忽略大小写的完全匹配;\\n2:模糊匹配;\\n3:忽略大小写的模糊匹配.");    }    private static void findKey(String[] keys, int level, File directory) {        for(File file : directory.listFiles()) {            String pathName = file.getName();            if(file.isDirectory())                findKey(keys, level, file);            else if(pathName.toLowerCase().endsWith(".jar"))                try {                    String path = file.getPath();                    Enumeration<JarEntry> enu = new JarFile(path).entries();                    while (enu.hasMoreElements()) {                        String fullName = enu.nextElement().getName();                        String[] packages = fullName.split("/");                        String[] fileName = packages[packages.length - 1].split("\\\\.");// 类完整名                        String packageName = fullName.replace("/", ".");                        for (int i = 1; i < keys.length; i++) {// 多参时分为全字匹配与部分匹配                            boolean flag = false;                            switch (level) {                            case 0:                                if (fileName[0].equals(keys[i]))// 完全匹配                                    flag = true;                                break;                            case 1:                                if (fileName[0].equalsIgnoreCase(keys[i]))// 忽略大小写的完全匹配                                    flag = true;                                break;                            case 2:                                if (packageName.contains(keys[i]))// 模糊匹配                                    flag = true;                                break;                            case 3:                                if (packageName.toLowerCase().contains(keys[i].toLowerCase()))// 忽略大小写的模糊匹配                                    flag = true;                                break;                            }                            if (flag)                                System.out.println("找到文件" + packageName + ",\\n\\t" + path + "\\n");                        }                    }                } catch (IOException e) {                    System.out.println("error!");                    //e.printStackTrace();                    //System.out.println(e.getMessage());                }        }    }    public static void main(String[] args) {        findKey(args);    }}//该片段来自于http://byrx.net
相关栏目:

用户点评