[JAVA] Parcourir les classes?

Bonjour :hello:

Voilà, j’explique mon problème, j’aimerais parcourir une partie des classes d’une application afin de ne garder par la suite que quelques unes (non prédéfinies, seulement sur certains critères). :grrr:

J’aimerais savoir si il est possible de parcourir l’ensemble des package dans un premier temps, puis des classes les composants. J’ai cherché sous google, qui ne fut pas un ami de première classe sur ce coup là :neutre:

Merci de m’aider

:hello: Bonjour,
Il faudrait un peu savoir quels sont tes “critères” pour savoir si tu as besoin de “Réflexion” (ou introspection): ce sont les classes Java qui permettent de consulter le contenu des Classes/package/methodes sous forme d’attributs.

Le problème, c’est que la classe “Package” ne va te retourner que les classes chragées dans le classLoader:
http://java.sun.com/j2se/1.4.2/docs/api/ja…ng/Package.html

Donc il faut d’abord parcourir tes fichiers à la main avec File.listFiles() pour avoir les noms de package et de classes, puis charger tes classes (et tes packages?) par Class clazz = Class.forname(classname);

si c’est bien ça que tu veux :wink:

Tiens, tu t’y prendrais comment pour lister les classes du package, sachant que c’est dans un fichier jar? (là non, mais j’aimerai bien)

Dsl d’avoir mit aussi longtemps a repondre.

Alors en fait, le nom des classes, justement, c’est ce que je dois récupérer, sans en connaitre le nom. Je ne connais qu’une partie du nom de la classe, là est le pb.

L’introspection, ca me servira a rien, sauf erreur de ma part :neutre:

La réflexion, j’connais pas :paf:

Mici

Ben tu peux pas les savoir, justement. Mais en listant les fichiers oui. Le truc c’est qu’il faut lire le jar, etc.

Oui,
pour lire le jar, ben… "JarFile" :smiley: tu boucle sur les entries.

Maintenant, si tu veux même connaître la liste des jar de ton classpath, tu passe par le ClassLoader, qui est un URLClassLoader, la méthode “getUrls” te donne la liste des éléments de ton classpath, et tu peux boucler sur chaque élément, (en testant si c’est jar, zip, dossier, etc…) mais là, ça devient usinagazifiant.

en prenant les sources du jdk(j’insiste, c’est vachement utile) les sources de URLClassLoader peuvent contenir des éléments intéressants.
La réflexion te sera utile si tu veux charger la classe après avoir obtenu son nom.
:slight_smile:

J’ai déjà lu le code source des class loaders :slight_smile: c’était surtout sur comment savoir les classes d’un package. Je trouve ça quand même lourd de devoir lire le dossier correspondant au package :confused:

Oui, c’est un peu lourd, mais c’est comme ça que fait le classloader :neutre:
Pour l’utiliser intensivement, on se gère un petit cache, comme ça on ne lit qu’une fois chaque package.
:slight_smile: