326 votes

Obtenir une liste des ressources du répertoire classpath

Je suis à la recherche d'un moyen d'obtenir une liste de tous les noms de ressource à partir d'un répertoire de chemin de classe, quelque chose comme une méthode List<String> getResourceNames (String directoryName).

Par exemple, étant donné un chemin de classe le répertoire x/y/z contenant des fichiers a.html, b.html, c.html et un sous-répertoire d, getResourceNames("x/y/z") doit retourner un List<String> contenant les chaînes de caractères suivantes:['a.html', 'b.html', 'c.html', 'd'].

Il devrait fonctionner à la fois pour les ressources dans le système de fichiers et les bocaux.

Je sais que je peux écrire un petit extrait avec Files, JarFiles et URLs, mais je ne veux pas réinventer la roue. Ma question est, étant donné existantes disponibles publiquement les bibliothèques, quelle est la façon la plus rapide à mettre en oeuvre getResourceNames? Le printemps et l'Apache Commons piles sont à la fois réalisables.

197voto

iirekm Points 2338

Je sais que trois solutions :

1) écrire scanner personnalisée, par exemple. comme dans le post ci-dessus.

2) PathMatchingResourcePatternResolver du Framework Spring

3) les 2 techniques ci-dessus peuvent être très lents à l’exécution si votre classpath est énorme. Est une solution plus rapide : http://code.google.com/p/reflections/ - il juste « précompile » la recherche au moment de la compilation n’est rapide au moment de l’exécution

66voto

Jigar Joshi Points 116533

Voici le code
Source: forums.devx.com/showthread.php?t=153784

Si vous utilisez printemps ont un regard sur PathMatchingResourcePatternResolver

24voto

Rob Points 392

Si vous utilisez apache commonsIO vous pouvez utiliser pour le système de fichiers (éventuellement avec filtre d’extension) :

et pour les ressources/classpath :

Si vous ne savez pas si « directoy / » est dans le système de fichiers ou ressources, vous pouvez ajouter un

ou

avant les appels et utiliser les deux en combinaison...

1voto

Dacav Points 2536

La solution de contournement moins alambiquée pour cela est probablement ce qui suit :

Tout d’abord lancer la commande `` dans le répertoire cible, puis lire l’index comme ceci :

.. .et pour l’enregistrement (même si cela n’aide pas), je pense que c’est fou, il n’y a aucun moyen de lire un répertoire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X