2016-09-15 203 views
0

我試圖找出使用類名的jar名稱。假設我將類名稱作爲「Socket」或「LinkedList」作爲字符串。所以我想知道如何找出它屬於哪個罐子。 我想通過這種方式查找Jar名稱使用類名稱

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

它給瓶子的名字,但它給罐子的名字,但對於一些要求,我沒有像「String.class」,但只有字符串「字符串」。 從這個字符串中找出它屬於哪個jar。

感謝

+0

可能的Class.forName( 「java.lang.String中」)?所以你得到的類實例,然後可以用它來獲取jar名稱 – Sergi

+0

我使用了相同的過程,但它的結果與「String.class」的幫助,但我想從字符串? –

回答

0

你可以做的是把字符串輸入,然後添加的.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); 
+0

調用Class.forName()時,不需要將「.class」添加到完全限定名稱() – Sergi

+0

謝謝。是一個錯字。 – Techidiot