有这样的结构 A.jarA.jar 的内部结构是这样的 b\B.class 和c\C1.class C2.class现在需求是 类B要取得c包内所有以“C”开头的类的实例。麻烦给出详细代码。
在jar包中取得路径,我这里是目录很奇怪,比如 URL url = B.class.getResource("/c");
在非jar包下返回not null,jar包下就为null。
在jar包中取得路径,我这里是目录很奇怪,比如 URL url = B.class.getResource("/c");
在非jar包下返回not null,jar包下就为null。
B类和其他C类都是在同一个jar包中
如果想从外部加载JAR文件中的类,可以用URLClassLoader,我用过,是可以的,可以将JAR加载到类路径中。
try {
file = new JarFile("test.jar");
Enumeration<JarEntry> entrys = file.entries();
while (entrys.hasMoreElements()) {
JarEntry jar = entrys.nextElement();
String name = jar.getName();
if (!jar.isDirectory() && name.endsWith(".class")) {
String classname = name;
int index = name.lastIndexOf("/");
if (index != -1) {
classname = name.substring(index + 1);
}
if (classname.startsWith("C")) {
System.out.println(name);
}
} }
} catch (IOException e) {
e.printStackTrace();
} finally {
if (file != null) {
try {
file.close();
} catch (IOException ignore) {
}
}
}
如果不知道jar的路径和文件名,那就不好弄了!
java.util.jar.JarFile file = null;;
try {
file = new JarFile(url.getFile());
Enumeration<JarEntry> entrys = file.entries();
while (entrys.hasMoreElements()) {
JarEntry jar = entrys.nextElement();
String name = jar.getName();
if (!jar.isDirectory() && name.endsWith(".class")) {
String classname = name;
int index = name.lastIndexOf("/");
if (index != -1) {
classname = name.substring(index + 1);
}
if (classname.startsWith("C")) {
System.out.println(name);
}
} }
} catch (IOException e) {
e.printStackTrace();
} finally {
if (file != null) {
try {
file.close();
} catch (IOException ignore) {
}
}
}
只能采取 zip 文件流的方式来读取。