J'ai un dossier / package de ressources à la racine de mon projet, je ne veux pas charger un certain fichier. Si je voulais charger un certain fichier, j'utiliserais class.getResourceAsStream et tout irait bien !! Ce que je veux en fait, c'est charger un «dossier» dans le dossier des ressources, faire une boucle sur les fichiers à l'intérieur de ce dossier et obtenir un flux vers chaque fichier et lire dans le contenu ... Supposons que les noms de fichiers ne sont pas déterminés avant l'exécution ... Que devrais-je faire? Existe-t-il un moyen d'obtenir une liste des fichiers dans un dossier dans votre fichier jar? Notez que le fichier Jar avec les ressources est le même fichier jar à partir duquel le code est exécuté ...
Merci d'avance...
Réponses:
Enfin, j'ai trouvé la solution:
Le deuxième bloc fonctionne uniquement lorsque vous exécutez l'application sur l'IDE (pas avec le fichier jar), vous pouvez le supprimer si vous n'aimez pas cela.
la source
Essayez ce qui suit.
Créez le chemin de la ressource
"<PathRelativeToThisClassFile>/<ResourceDirectory>"
Par exemple, si votre chemin de classe est com.abc.package.MyClass et que vos fichiers de ressources sont dans src / com / abc / package / resources /:Vous pouvez aussi utiliser
la source
File
classe. Ce code ne fonctionne pas avec les ressources dans un fichier JAR. Période.Je sais que cela remonte à plusieurs années. Mais juste pour d'autres personnes rencontrent ce sujet. Ce que vous pouvez faire est d'utiliser la
getResourceAsStream()
méthode avec le chemin du répertoire, et le flux d'entrée aura tous les noms de fichiers de ce répertoire. Après cela, vous pouvez concater le chemin du répertoire avec chaque nom de fichier et appeler getResourceAsStream pour chaque fichier d'une boucle.la source
J'ai eu le même problème entre les mains pendant que j'essayais de charger certaines configurations hadoop à partir de ressources emballées dans le jar ... à la fois sur l'IDE et sur le jar (version finale).
J'ai trouvé que
java.nio.file.DirectoryStream
c'était le meilleur moyen d'itérer le contenu du répertoire sur le système de fichiers local et le fichier jar.la source
Le code suivant renvoie le «dossier» souhaité comme chemin, qu'il se trouve ou non dans un fichier jar.
Nécessite java 7+.
la source
folder
) semble être ignoré lors de la création du système de fichiers. Par conséquent,getPath
ne revient pasfolder/path/to/...
, mais seulementpath/to/...
.Une autre solution, vous pouvez le faire en utilisant
ResourceLoader
comme ceci:la source
Simple ... utilisez OSGi. Dans OSGi, vous pouvez parcourir les entrées de votre Bundle avec findEntries et findPaths.
la source
Dans mon fichier jar, j'avais un dossier appelé Upload, ce dossier contenait trois autres fichiers texte et je devais avoir exactement le même dossier et des fichiers en dehors du fichier jar, j'ai utilisé le code ci-dessous:
la source
Comme le soulignent les autres réponses, une fois que les ressources sont dans un fichier jar, les choses deviennent vraiment laides. Dans notre cas, cette solution:
https://stackoverflow.com/a/13227570/516188
fonctionne très bien dans les tests (car lorsque les tests sont exécutés, le code n'est pas emballé dans un fichier jar), mais ne fonctionne pas lorsque l'application fonctionne normalement. Donc, ce que j'ai fait, c'est ... Je code en dur la liste des fichiers dans l'application, mais j'ai un test qui lit la liste réelle à partir du disque (peut le faire puisque cela fonctionne dans les tests) et échoue si la liste réelle ne fonctionne pas ne correspond pas à la liste renvoyée par l'application.
De cette façon, j'ai du code simple dans mon application (pas de trucs), et je suis sûr que je n'ai pas oublié d'ajouter une nouvelle entrée dans la liste grâce au test.
la source
Ce lien vous explique comment.
La magie est la méthode getResourceAsStream ():
la source