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();
|
}
|
}
|
}
|