2016-09-15 11 views
0

クラス名を使用するためのjar名を調べようとしています。私は文字列として "ソケット"または "LinkedList"としてクラス名を持っていると仮定します。だから私はそれがどのジャーであるかを知る方法を知りたい。 私はそれがジャー名を与えているクラス名を使用してJar名を検索

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

を渡していた場合、私はこの方法では、このよう

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; 

} 

で見つけるしようとしていますが、それはjarファイル名を与えているが、いくつかの要件のために、私が持っていません"String.class"のようになりますが、文字列 "String"のみです。 この文字列から、どの瓶がどの瓶に属しているかを調べます。あなたは何ができるか

おかげ

+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

関連する問題