有这样的结构 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。

解决方案 »

  1.   

    jar文件结构和zip结构应该是一样的,所以你可以使用ZipEntry来试试。
      

  2.   

    URL url = ClassLoader.getSystemResource("c/C1.class");
      

  3.   


    B类和其他C类都是在同一个jar包中
      

  4.   

    URL url = ClassLoader.getSystemResource("c/C1.class");可以从程序内部加载类,我做的一个输出结果是:jar:file:/C:/Documents%20and%20Settings/Administrator.MICROSOF-B715C3/%e6%a1%8c%e9%9d%a2/1.jar!/c/C1.class
    如果想从外部加载JAR文件中的类,可以用URLClassLoader,我用过,是可以的,可以将JAR加载到类路径中。
      

  5.   

    如果还想解析JAR,可以用JarFile,怎么使用上网一搜就有了
      

  6.   

    java.util.jar.JarFile file = null;;
    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) {
    }
    }
    }
      

  7.   

    谢谢楼上诸位但是我现在的情况是:类B本身在jar包内,他不知道jar的名字,许多以C开头的类也在jar内,也不知道他们的名字
      

  8.   


    如果不知道jar的路径和文件名,那就不好弄了!
      

  9.   

    URL url = getClass().getProtectionDomain().getCodeSource().getLocation();
    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) {
    }
    }
    }
      

  10.   

    如果连名字都不知道的话,那得使用 java.util.jar 包下类来解析了,这个包下的类是 java.util.zip 包的子类,
    只能采取 zip 文件流的方式来读取。