J'écris un programme qui analyse les fichiers .class
. Je veux attacher le nom de paquet et de classe à ma sortie. Mon plan est d'écrire une fonction qui prend le nom du paquet et de la classe en entrée et trouve le fichier correspondant .class
(donc l'utilisateur n'a pas à entrer cela aussi, et ne peut pas se tromper), où 'find' doit être lu comme 'donnez-moi des données que je peux utiliser comme arguments pour le constructeur ClassParser
de BCEL' (soit un nom de fichier, soit un nom de fichier zip et un nom dans le fichier zip).Traduire le nom du package + class en .class filename
Comment puis-je faire? Est-ce que java vient avec quelque chose qui fait ça? Je comprends la résolution de nom à faire dans le contexte d'un CLASSPATH
, donc l'utilisateur devrait probablement fournir l'un de ceux aussi; C'est très bien.
Remarque: les solutions doivent et non exécuter n'importe quel code à partir du fichier .class
. Juste les octets, ma'm ;-)
Je n'ai pas explicitement déclaré, bien que je voulais dire, que la résolution de classe devrait être faite dans un chemin de classe fourni par l'utilisateur, qui peut être différent de celui avec lequel mon code fonctionne sous/avec. Je pense que tout ce que je dois faire est de donner des arguments différents à 'new ClassPath (...)'. Avec cela en place, cela semble très prometteur! –
J'ai supposé que vous vouliez pouvoir fournir un chemin de classe arbitraire; C'est pourquoi j'ai choisi le constructeur dans l'exemple, sinon le 'ClassPath.SYSTEM_CLASS_PATH' fonctionnerait aussi pour l'exemple. Notez que le 'ClassPath' construit avec le chemin explicite ne trouve pas les classes du système car elles ne sont pas accessibles depuis le chemin de la classe explicite, vous devrez [fournir' SYSTEM_CLASS_PATH' comme parent] (http: //commons.apache. org/proper/commun-bcel/apidocs/org/apache/bcel/util/ClassPath.html # ClassPath-org.apache.bcel.util.ClassPath-java.lang.String-) pour cela. – Holger