• 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('\\', '/'));
                }
            }
        }
    }
  • 相关阅读:
    docker容器跑tomcat遇到的坑
    PCL 编程多个点云合成
    PCL 常用小知识
    PCL点云库中的坐标系(CoordinateSystem)
    Ubuntu14.04(64位)下gcc-linaro-arm-linux-gnueabihf交叉编译环境搭建
    Windows cmd 快捷操作
    #Pragma Pack与内存分配
    线段上的整数点个数
    基于PCL绘制模型并渲染
    rosbag数据记录及转换图片、视频
  • 原文地址:https://www.cnblogs.com/huapox/p/3172681.html
Copyright © 2020-2023  润新知