Fichier jar
tattou11
Messages postés
16
Date d'inscription
Statut
Membre
Dernière intervention
-
tattou11 Messages postés 16 Date d'inscription Statut Membre Dernière intervention -
tattou11 Messages postés 16 Date d'inscription Statut Membre Dernière intervention -
Bonsoir,
Je vodrais que mon programme java puisse afficher tous les méthodes d'une classe contenu dans un fichier jar dont on connait , en lui indiquant le chemin vers le jar et le nom de la classe. . Merci d'avance à tous,
Je vodrais que mon programme java puisse afficher tous les méthodes d'une classe contenu dans un fichier jar dont on connait , en lui indiquant le chemin vers le jar et le nom de la classe. . Merci d'avance à tous,
A voir également:
- Fichier jar
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
2 réponses
Il te faut un petit class loader pour récupérer la classe dans le fichier JAR, et ensuite tu fais un peu de reflect pour récupérer les méthodes de la classe et c'est fini... Finger on the nose !
URLClassLoader ucl;
try {
ucl = new URLClassLoader(new URL[] { file.toURL() });
final Class driverClazz = ucl.loadClass(className.replace(".class",""));
System.err.println(driverClazz);
} catch (final Exception e) {
e.printStackTrace();
}
}
mais je trouve une difficulté pour récupérer les méthodes du classes, en effet j'ai essayé avec ce codes mais j'arrive pas à la solution.
public static void getMethodNames(List<String> list){
try{
for(int i=0;i<list.size();i++){
Class<?> c=Class.forName(list.get(i));
Method[] m=c.getMethods();
System.out.println(m);
}
}
catch( final Exception e){
e.printStackTrace ();
}
}
alors j'espère que vous m'expliquer comment faire le reflect .
et merci d'avance.
for (int j=0; j<m.length; j++) System.out.println(m[j]);pour mieux me comprendre je vous donne le code:
public class Test {
public static void main(final String[] args) {
final String filePath = "MonRep.fichier.jar";
final List<String> list = getClasseNamesInPackage
(filePath, "");
final String className= list.get(0);
final File file = new File(filePath);
URLClassLoader ucl;
try {
ucl = new URLClassLoader(new URL[] { file.toURL() });// pour recuperer le fichier.jar
} catch (final Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static List<String> getClasseNamesInPackage
(final String jarName, String packageName){
final ArrayList<String> classes = new ArrayList<String> ();
packageName = packageName.replaceAll("\\." , "/");//ici pour lire correctement le format
try{
final JarInputStream jarFile = new JarInputStream
(new FileInputStream (jarName));
JarEntry jarEntry;
while(true) {
jarEntry=jarFile.getNextJarEntry ();
if(jarEntry == null){
break;
}
if((jarEntry.getName ().startsWith (packageName)) &&
(jarEntry.getName ().endsWith ("MaClasse.class")) ) {//MaClasse est la classe que je veux récupérer ses méthodes
classes.add (jarEntry.getName().replaceAll("/", "\\."));
//System.out.println("ici"+jarEntry.getName().replaceAll("/", "\\."));//le bon format d'une classe
String c=jarEntry.getName().replaceAll("/", "\\.");
Class<?> Clz=Class.forName(c);// mon but ici de trouver le classe Clz pour son nom c mais il y a une exception ici!!! quel est le probléme
System.out.println("je suis la class"+D);
Method[] meth=Clz.getMethods();//ici je veux lire et extraire les méthodes dans la classe Clz
System.out.println("ici la prmiére méthode de le classe"+D+meth[0]);// pour vérifier une méthode
}
}
}
catch( final Exception e){
e.printStackTrace ();
}
return classes;
}
Voici un exemple complet :
import java.io.File; import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoader; public class Test { public static void main(String...args) throws Exception { ClassLoader jar = new URLClassLoader(new URL[]{ new File("/home/KX/gs-core-1.1.1.jar").toURI().toURL() }); Class<?> classe = jar.loadClass("org.graphstream.graph.Graph"); for (Method m : classe.getMethods()) System.out.println(m); } }