Existe-t-il un moyen en Java de construire une instance de fichier sur une ressource récupérée à partir d'un fichier jar via le chargeur de classe?
Mon application utilise certains fichiers du jar (par défaut) ou d'un répertoire de système de fichiers spécifié lors de l'exécution (entrée utilisateur). Je recherche un moyen cohérent de
a) charger ces fichiers en tant que flux
b) lister les fichiers dans le répertoire défini par l'utilisateur ou dans le répertoire dans le jar respectivement
Edit: Apparemment, l'approche idéale serait de rester à l'écart de java.io.File. Existe-t-il un moyen de charger un répertoire à partir du chemin de classe et de répertorier son contenu (fichiers / entités qu'il contient)?
la source
InputStream
vous obtenez desgetResourceAsStream
arrêts pour récupérer les octets de la ressource après cette taille et retourne à la place 0 ssi elle est contenue dans un système de fichiers compressé comme un fichier jar. Vous semblez être obligé d'utilisergetResource
et de charger le fichier indépendamment de cela dans ce cas.read
méthode déterminant la quantité de données à lire (je n'étais pas au courant de cela). Et il semble que tout le fichier soit lu si le fichier en cours de lecture se trouve dans un dossier normal. Si le fichier se trouve dans un bocal parce qu'il a été empaqueté, il n'en lit que des parties.InputStream
, si vous voulez lire toute la ressource, vous devez boucler jusqu'à ce queread
renvoie -1.J'ai eu le même problème et j'ai pu utiliser ce qui suit:
la source
FileSystem
objet et en obtenir lePath
. Ensuite, vous pouvez le lire comme d'habitude. (voir stackoverflow.com/a/22605905/1876344 )Voici un peu de code d'une de mes applications ... Faites-moi savoir si cela répond à vos besoins. Vous pouvez l'utiliser si vous connaissez le fichier que vous souhaitez utiliser.
J'espère que cela pourra aider.
la source
toURI()
échouera.Un moyen fiable de construire une instance de fichier sur une ressource récupérée à partir d'un fichier jar est de copier la ressource en tant que flux dans un fichier temporaire (le fichier temporaire sera supprimé lorsque la JVM se fermera):
la source
Essaye ça:
Il existe d'autres méthodes disponibles, par exemple, voir ici: http://www.javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property.html
la source
C'est une option: http://www.uofr.net/~greg/java/get-resource-listing.html
la source