jinlin
2024-08-02 826cd5b51d5106cfea07e397eda184fb15ec7a30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package com.zt.life.util;
 
import java.io.IOException;
import java.security.CodeSource;
import java.security.ProtectionDomain;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
 
public class GetClass {
 
    public static void main(String[] args) {
        String PakageString = "org.openxmlformats.schemas.drawingml.x2006.main.ThemeDocument";
        GetFilePathByPackage(PakageString);
        System.out.println("\r\n");
        // 获取Class路径
        String alljar = System.getProperty("java.class.path");
        String[] alljarpath = alljar.split(";");
        // 根据路径遍历,该路径下的Jar包是否有该包,有就打印
        for (String jarpath : alljarpath) {
            if (jarpath.contains("jar")) {
                String[] jar = new String[2];
                jar[0] = jarpath;
                jar[1] = PakageString;
                getClassNameByJarAndPackage(jar);
            }
        }
    }
 
    /**
     * 根据类名打印JVM加载的类对应的Jar包路径,如GetFilePathByPackage("java.util")。
     *
     * @param PakageString 类名
     */
    public static void GetFilePathByPackage(String PakageString) {
        System.out.println("查找的类:" + PakageString);
 
        try {
            Class<?> c = Class.forName(PakageString);
            ProtectionDomain pd = c.getProtectionDomain();
            CodeSource cs = pd.getCodeSource();
            System.out.println("加载的类对应的路径:" + cs.getLocation().toString());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
 
    }
 
    /**
     * 根据jar包路径和包名来查询jar包中是否含有有关类
     *
     * @param jar jar[0] jar路径 jar[1] 包名
     */
    @SuppressWarnings("resource")
    public static void getClassNameByJarAndPackage(String[] jar) {
        String jarFilePath = jar[0];
        String packagePath = jar[1].replace(".", "/");
        try {
            JarFile jarFile = new JarFile(jarFilePath);
            Enumeration<JarEntry> entrys = jarFile.entries();
            while (entrys.hasMoreElements()) {
                JarEntry jarEntry = entrys.nextElement();
                String entryName = jarEntry.getName();
                if (entryName.equals(packagePath + ".class")) {
                    System.out.println("类路径:" + entryName + "\r\n" + "jar包的路径:" + jarFilePath);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}