Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在jar文件中列出类_Java_Class_Dynamic_Urlclassloader - Fatal编程技术网

Java 在jar文件中列出类

Java 在jar文件中列出类,java,class,dynamic,urlclassloader,Java,Class,Dynamic,Urlclassloader,如何动态加载jar文件并列出其中的类?看看包java.util.jar中的类。您可以在web上找到如何列出JAR中文件的示例,下面是。(请注意该页面底部的链接,还有更多示例向您展示如何使用JAR文件)。以下是在JAR中列出类的代码: import java.io.IOException; import java.util.Enumeration; import java.util.jar.JarEntry; import java.util.jar.JarFile; public class

如何动态加载jar文件并列出其中的类?

看看包
java.util.jar
中的类。您可以在web上找到如何列出JAR中文件的示例,下面是。(请注意该页面底部的链接,还有更多示例向您展示如何使用JAR文件)。

以下是在JAR中列出类的代码:

import java.io.IOException;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

public class JarList {
    public static void main(String args[]) throws IOException {

        if (args.length > 0) {
            JarFile jarFile = new JarFile(args[0]);
            Enumeration allEntries = jarFile.entries();
            while (allEntries.hasMoreElements()) {
                JarEntry entry = (JarEntry) allEntries.nextElement();
                String name = entry.getName();
                System.out.println(name);
            }
        }
    }
}

快速方式:只需以.zip的形式打开.jar文件,例如在7-zip中查找目录名。

查看jar文件的内容

要从命令提示符查看JAR文件的内容,请使用

jar-tf-jar文件

例如:

jar tf TicTacToe.jar


META-INF/MANIFEST.MF  
TicTacToe.class  
audio/  
audio/beep.au  
audio/ding.au  
audio/return.au  
audio/yahoo1.au  
audio/yahoo2.au  
images/  
images/cross.gif  
images/not.gif  

下面是一个版本,它扫描给定jar以查找扩展特定类的所有非抽象类:

try (JarFile jf = new JarFile("/path/to/file.jar")) {
    for (Enumeration<JarEntry> en = jf.entries(); en.hasMoreElements(); ) {
        JarEntry e = en.nextElement();
        String name = e.getName();
        // Check for package or sub-package (you can change the test for *exact* package here)
        if (name.startsWith("my/specific/package/") && name.endsWith(".class")) {
            // Strip out ".class" and reformat path to package name
            String javaName = name.substring(0, name.lastIndexOf('.')).replace('/', '.');
            System.out.print("Checking "+javaName+" ... ");
            Class<?> cls;
            try {
                cls = Class.forName(javaName);
            } catch (ClassNotFoundException ex)  { // E.g. internal classes, ...
                continue;
            }
            if ((cls.getModifiers() & Modifier.ABSTRACT) != 0) { // Only instanciable classes
                System.out.println("(abstract)");
                continue;
            }
            if (!TheSuper.class.isAssignableFrom(cls)) { // Only subclasses of "TheSuper" class
                System.out.println("(not TheSuper)");
                continue;
            }
            // Found!
            System.out.println("OK");
        }
    }
} catch (IOException e) {
    e.printStackTrace();
}
try(JarFile jf=newjarfile(“/path/to/file.jar”)){
对于(枚举en=jf.entries();en.hasMoreElements();){
JarEntry e=en.nextElement();
字符串名称=e.getName();
//检查包或子包(您可以在此处更改*exact*包的测试)
if(name.startsWith(“my/specific/package/”&&name.endsWith(“.class”)){
//去掉“.class”并将路径重新格式化为包名
字符串javaName=name.substring(0,name.lastIndexOf('.')).replace('/'),'.');
System.out.print(“检查“+javaName+”);
cls类;
试一试{
cls=Class.forName(javaName);
}catch(ClassNotFoundException ex){//例如内部类。。。
继续;
}
if((cls.getModifiers()&Modifier.ABSTRACT)!=0){//仅可实例化类
System.out.println(“(摘要)”);
继续;
}
如果(!TheSuper.class.isAssignableFrom(cls)){//仅“TheSuper”类的子类
System.out.println(“(非超级)”);
继续;
}
//找到了!
System.out.println(“OK”);
}
}
}捕获(IOE异常){
e、 printStackTrace();
}

当您知道JAR在哪里时,可以直接使用该代码。要获得这些信息,请参阅,因为自Java 9和模块引入以来,类路径发生了变化。

非常感谢,而“.class”文件就是类吗?如何将.class文件作为类加载?那么您想从JAR文件动态加载类吗?这比你最初要求的要多得多。也许这个问题包含了一些答案:对于像我这样的人来说,他们发现这个页面是因为他们试图找到如何在命令行中而不是通过Java列出jar中的类,答案是
jar tf yourfile.jar
@Hnatt或者任何类似7-zip的zip阅读器都可以工作(对于Windows),或者甚至为*nix解压-l yourfile.jar。如果您的工作站上没有
jar
命令,并且不想只为了这一次检查而安装它,那么这种方法非常有效