【问题标题】:Find Jar Name Using Class name [duplicate]使用类名查找 Jar 名称 [重复]
【发布时间】:2017-01-23 10:55:52
【问题描述】:

我试图找出使用类名的 jar 名称。假设我的类名称为“Socket”或“LinkedList”为字符串。所以我想知道如何找出它属于哪个罐子。 我正在尝试通过这种方式找出答案

 public static String getModuleName(Class classname) {
    String modulename = null;
    URL resource = classname.getResource('/' + classname.getName().replace('.', '/') + ".class");
    System.out.println(resource.getPath());
    String[] split = resource.getFile().split("/");
    for (String string : split) {
        if (string.contains("jar")) {
            modulename = string.replace("!", "");
        }
    }
    return modulename;

}

在这个方法中如果我通过了

    Class class1 = String.class;
    System.out.println(getModuleName(class1));

它给出了 Jar 名称,但它给出了 jar 名称,但出于某些要求,我没有像 "String.class" 但只有字符串 "String" 。 从这个字符串中如何找出它属于哪个罐子。

谢谢

【问题讨论】:

  • 也许是 Class.forName("java.lang.String") ?所以你得到了 Class 实例,然后可以使用它来获取 jar 名称
  • 我使用了相同的过程,但它在“String.class”的帮助下给出了结果,但我想要来自字符串?

标签: java class jar build classpath


【解决方案1】:

您可以做的是获取字符串输入,然后将 .class 添加到其中,然后他们使用 Class.forName 将其转换为类对象(完全限定名称)。

String classstring = oldstring + ".class";
Class<?> class1 = Class.forName(classstring);
System.out.println(getModuleName(class1));

或者

String classstring = oldstring;
ClassLoader cloader;
Class class2 = cloader.loadClass(classstring);
System.out.println(getModuleName(class2);

【讨论】:

  • 调用Class.forName()时,完全限定名不需要加“.class”
  • 谢谢。是一个错字。
猜你喜欢
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
  • 2011-06-13
  • 1970-01-01
  • 2012-11-25
  • 2014-04-13
  • 1970-01-01
相关资源
最近更新 更多