Lister le contenu d'un jar

tominfo Messages postés 93 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 30 janvier 2009 - 28 mars 2004 à 04:01
tominfo Messages postés 93 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 30 janvier 2009 - 28 mars 2004 à 19:17
Salut à tous,

Pour créer un programme je dois lister le contenu d'un certain package appartenant au fichier jar (depuis lequel il est lancé). Malheureusement, apparemment on ne peut pas y acceder de la manière classique (avec java.io.File.list()) car les fichiers sont compressés et n'ont pas de chemin direct spécifié.

Si quelqu'un sait comment on peut lister le contenu d'un jar depuis le programme à partir duquel il est lancé, il me donnerait un sérieux coup de main...

Merci d'avance pour vos suggestions!

8 réponses

kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
28 mars 2004 à 11:53
Salut,

en utilisant java.util.jar.JarFile tu devrais arriver à faire ce que tu veux. Avec la méthode entries tu récupères une enumeration de JarEntry et en faisant un getName tu as le nom complet (package et nom de classe). Après il reste à filtrer selon le package que tu souhaites.
0
tominfo Messages postés 93 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 30 janvier 2009
28 mars 2004 à 12:50
J'avais déjà regarder cette classe mais j'avais pas trouvé de méthodes interressantes...

En tout cas,
 en faisant un getName tu as le nom complet (package et nom de classe)

ça c'est axactement ce qu'il me faut!

Juste un petit détail, comment je fais pour charger mon propre jar? Le constructeur de JarFile demande un File ou un String. Il faut que je trouve depuis quel répertoire est executé mon jar? Comment je peux le savoir?

Merci beaucoup,
J'essaie ça tout à l'heure!
0
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
28 mars 2004 à 12:58
une autre solution est de définir ton propre ClassLoader.
Il y a une méthode getPackage qui te donne tous les packages accessibles donc aussi ceux qui sont dans ton jar.
Cette méthode est protected donc il faut définir ton ClassLoader.

public class MonClassLoader extends ClassLoader {

    public void listPackage() {
        Package[] packages = getPackages();
        for (int i = 0; i < packages.length; i++) {
            System.out.println(packages[i].getName());
        }
    }

    public static void main(String[] args) {
        new MonClassLoader().listPackage();
    }
}

Ce ClassLoader va te donner la liste des packages et tu n'as plus qu'à filtrer ceux que tu veux.
0
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
28 mars 2004 à 13:04
oula !!!!
je me suis un peu emballé !! :big) Ca te donne la liste des packages mais pas les classes.
Désolé décalage horaire, 1 heure de moins ca fait pas du bien !!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
28 mars 2004 à 13:20
Tu peux accéder à ton propre jar par le classpath.
Le classpath est défini dans la propriété java.class.path
Donc si ton classpath ne contient que ton jar tu peux faire
JarFile jarFile = new JarFile(System.getProperty("java.class.path"));


Si il y a plusieurs jars ou répertoires, il faut d'abord parser le classpath.
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
28 mars 2004 à 15:23
GodConan :clown)

et si t fou ;o) tu peu tou desiper ;o) ds un rep temporaire ;o) et tu te retrouve ds une conf ;o) de fichier normal ;o)...
0
tominfo Messages postés 93 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 30 janvier 2009
28 mars 2004 à 15:32
Merci beaucoup pour toutes ces réponses...
Je vais tenter les solutions avec JarFile...
Et dans le cas extreme où y'a pas moyen de faire ce que je veux avec JarFile la solution de GodConan marchera forcément (enfin faut encore trouver un répertoire dans lequel on a les droits en écriture pour faire comme ça...)

Merci
@+
0
tominfo Messages postés 93 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 30 janvier 2009
28 mars 2004 à 19:17
Avec
JarFile(System.getProperty("java.class.path"));
jarFile.entries();
a marche super bien!

Merci à vous!
0
Rejoignez-nous