Comment lister les fichiers d'un fichier JAR?

J'ai ce code qui lit tous les fichiers d'un répertoire.

    File textFolder = new File("text_directory");

    File [] texFiles = textFolder.listFiles( new FileFilter() {
           public boolean accept( File file ) {
               return file.getName().endsWith(".txt");
           }
    });

Il fonctionne très bien. Il remplit le tableau avec tous les fichiers qui se terminent par ".txt" du répertoire "text_directory".

Comment puis-je lire le contenu d'un répertoire dans un mode similaire dans un fichier JAR?

Donc ce que je veux vraiment faire est de, à la liste de toutes les images à l'intérieur de mon fichier JAR, afin que je puisse les charger avec:

ImageIO.read(this.getClass().getResource("CompanyLogo.png"));

(Que l'on travaille parce que le "CompanyLogo" est "codé en dur", mais le nombre d'images à l'intérieur du fichier JAR peut être de 10 à 200 de longueur variable.)

MODIFIER

Donc je suppose que mon principal problème pourrait être: Comment connaître le nom du fichier JAR où ma classe principale vies?

Certes, j'ai pu le lire à l'aide de java.util.Zip.

Ma Structure est comme ceci:

Ils sont comme:

my.jar!/Main.class
my.jar!/Aux.class
my.jar!/Other.class
my.jar!/images/image01.png
my.jar!/images/image02a.png
my.jar!/images/imwge034.png
my.jar!/images/imagAe01q.png
my.jar!/META-INF/manifest 

Droit maintenant, je suis en mesure de charger par exemple "images/image01.png" utilisation:

    ImageIO.read(this.getClass().getResource("images/image01.png));

Mais seulement parce que je sais le nom du fichier, pour le reste, je dois charger dynamiquement.

  • Juste une pensée, pourquoi ne pas zip/jar images dans un fichier séparé et de lire les entrées à partir de votre classe dans un autre pot?
  • Car il aurait besoin d'un "extra" de l'étape de distribution/installation. 🙁 Vous savez, les utilisateurs finaux.
  • Étant donné que vous avez créé le pot, vous pourriez aussi bien inclure la liste des fichiers qui s'y trouvent, plutôt que de tenter des trucs.
  • Eh bien, je peux me tromper mais bocaux peut être incorporé à l'intérieur d'autres pots. Celui-jar(TM) de la solution d'emballage ibm.com/developerworks/java/library/j-onejar travaille sur cette base. À l'exception, dans votre cas, vous n'avez pas besoin de la capacité de charge des classes.
InformationsquelleAutor OscarRyz | 2009-09-15