Bonjour,
J'ai packagé une appli dans un jar, et dans mon code, je récupère un
InputStream sur des fichiers de ce jar en utilisant le classique
getResourceAsStream(FileName) de l'objet Class. Ca ca marche, pas de pb.
Or, je souhaite pouvoir lire le contenu d'un "repertoire" du jar, comme
le fait la méthode "File.listFiles();"
Or , un getResourceStream() sur un repertoire du jar ne donne rien a
priori. J'ai bien un InputStream, mais je peux rien en faire.
Pareil avec getResource(dirName). J'ai bien une URL qui "pointe" dans le
jar, mais de toute façon, je peux rien en faire.
Donc:
InputStream is = this.getClass().getResourceAsStream("myDirInTheJar");
is.read() ==> throw exception
Exception in thread "main" java.lang.NullPointerException
at java.io.FilterInputStream.read(FilterInputStream.java:66)
at MainClass.main(MainClass.java:256)
Cela veut-til dire que je suis bon pour passer par java.utils.jar.*?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Black Myst
Salut,
Je ne sais pas trop ce que tu veux faire, mais tu me semble mal partie... Il n'y a pas de répertoire dans une un JAR, donc pas de moyen de lire.
Quel est ton objectif ? Il y a surement une autre façon de faire...
Black Myst
Bonjour, J'ai packagé une appli dans un jar, et dans mon code, je récupère un InputStream sur des fichiers de ce jar en utilisant le classique getResourceAsStream(FileName) de l'objet Class. Ca ca marche, pas de pb.
Or, je souhaite pouvoir lire le contenu d'un "repertoire" du jar, comme le fait la méthode "File.listFiles();"
Or , un getResourceStream() sur un repertoire du jar ne donne rien a priori. J'ai bien un InputStream, mais je peux rien en faire.
Pareil avec getResource(dirName). J'ai bien une URL qui "pointe" dans le jar, mais de toute façon, je peux rien en faire.
Donc:
InputStream is = this.getClass().getResourceAsStream("myDirInTheJar"); is.read() ==> throw exception
Exception in thread "main" java.lang.NullPointerException at java.io.FilterInputStream.read(FilterInputStream.java:66) at MainClass.main(MainClass.java:256)
Cela veut-til dire que je suis bon pour passer par java.utils.jar.*?
D'avance merci
François
Salut,
Je ne sais pas trop ce que tu veux faire, mais tu me semble mal
partie... Il n'y a pas de répertoire dans une un JAR, donc pas de
moyen de lire.
Quel est ton objectif ? Il y a surement une autre façon de faire...
Black Myst
Bonjour,
J'ai packagé une appli dans un jar, et dans mon code, je récupère un
InputStream sur des fichiers de ce jar en utilisant le classique
getResourceAsStream(FileName) de l'objet Class. Ca ca marche, pas de pb.
Or, je souhaite pouvoir lire le contenu d'un "repertoire" du jar, comme
le fait la méthode "File.listFiles();"
Or , un getResourceStream() sur un repertoire du jar ne donne rien a
priori. J'ai bien un InputStream, mais je peux rien en faire.
Pareil avec getResource(dirName). J'ai bien une URL qui "pointe" dans le
jar, mais de toute façon, je peux rien en faire.
Donc:
InputStream is = this.getClass().getResourceAsStream("myDirInTheJar");
is.read() ==> throw exception
Exception in thread "main" java.lang.NullPointerException
at java.io.FilterInputStream.read(FilterInputStream.java:66)
at MainClass.main(MainClass.java:256)
Cela veut-til dire que je suis bon pour passer par java.utils.jar.*?
Je ne sais pas trop ce que tu veux faire, mais tu me semble mal partie... Il n'y a pas de répertoire dans une un JAR, donc pas de moyen de lire.
Quel est ton objectif ? Il y a surement une autre façon de faire...
Black Myst
Bonjour, J'ai packagé une appli dans un jar, et dans mon code, je récupère un InputStream sur des fichiers de ce jar en utilisant le classique getResourceAsStream(FileName) de l'objet Class. Ca ca marche, pas de pb.
Or, je souhaite pouvoir lire le contenu d'un "repertoire" du jar, comme le fait la méthode "File.listFiles();"
Or , un getResourceStream() sur un repertoire du jar ne donne rien a priori. J'ai bien un InputStream, mais je peux rien en faire.
Pareil avec getResource(dirName). J'ai bien une URL qui "pointe" dans le jar, mais de toute façon, je peux rien en faire.
Donc:
InputStream is = this.getClass().getResourceAsStream("myDirInTheJar"); is.read() ==> throw exception
Exception in thread "main" java.lang.NullPointerException at java.io.FilterInputStream.read(FilterInputStream.java:66) at MainClass.main(MainClass.java:256)
Cela veut-til dire que je suis bon pour passer par java.utils.jar.*?
D'avance merci
François
frisco
Bonjour, Enfin, quand je parle de Repertoire, je parle de notion d'arborescence. Un jar, c'est un zip (grosso-modo), et le zip gere la notin d'arborescence. Je souhaite pouvoire recupérer une resourceStream sur un "repertoire" au sens jar. Mais j'en suis quitte pour passer par l'API Zp ou Jar
François
Salut,
Je ne sais pas trop ce que tu veux faire, mais tu me semble mal partie... Il n'y a pas de répertoire dans une un JAR, donc pas de moyen de lire.
Quel est ton objectif ? Il y a surement une autre façon de faire...
Black Myst
Bonjour, J'ai packagé une appli dans un jar, et dans mon code, je récupère un InputStream sur des fichiers de ce jar en utilisant le classique getResourceAsStream(FileName) de l'objet Class. Ca ca marche, pas de pb.
Or, je souhaite pouvoir lire le contenu d'un "repertoire" du jar, comme le fait la méthode "File.listFiles();"
Or , un getResourceStream() sur un repertoire du jar ne donne rien a priori. J'ai bien un InputStream, mais je peux rien en faire.
Pareil avec getResource(dirName). J'ai bien une URL qui "pointe" dans le jar, mais de toute façon, je peux rien en faire.
Donc:
InputStream is = this.getClass().getResourceAsStream("myDirInTheJar"); is.read() ==> throw exception
Exception in thread "main" java.lang.NullPointerException at java.io.FilterInputStream.read(FilterInputStream.java:66) at MainClass.main(MainClass.java:256)
Cela veut-til dire que je suis bon pour passer par java.utils.jar.*?
D'avance merci
François
Bonjour,
Enfin, quand je parle de Repertoire, je parle de notion d'arborescence.
Un jar, c'est un zip (grosso-modo), et le zip gere la notin d'arborescence.
Je souhaite pouvoire recupérer une resourceStream sur un "repertoire" au
sens jar.
Mais j'en suis quitte pour passer par l'API Zp ou Jar
François
Salut,
Je ne sais pas trop ce que tu veux faire, mais tu me semble mal
partie... Il n'y a pas de répertoire dans une un JAR, donc pas de
moyen de lire.
Quel est ton objectif ? Il y a surement une autre façon de faire...
Black Myst
Bonjour,
J'ai packagé une appli dans un jar, et dans mon code, je récupère un
InputStream sur des fichiers de ce jar en utilisant le classique
getResourceAsStream(FileName) de l'objet Class. Ca ca marche, pas de pb.
Or, je souhaite pouvoir lire le contenu d'un "repertoire" du jar,
comme le fait la méthode "File.listFiles();"
Or , un getResourceStream() sur un repertoire du jar ne donne rien a
priori. J'ai bien un InputStream, mais je peux rien en faire.
Pareil avec getResource(dirName). J'ai bien une URL qui "pointe" dans
le jar, mais de toute façon, je peux rien en faire.
Donc:
InputStream is = this.getClass().getResourceAsStream("myDirInTheJar");
is.read() ==> throw exception
Exception in thread "main" java.lang.NullPointerException
at java.io.FilterInputStream.read(FilterInputStream.java:66)
at MainClass.main(MainClass.java:256)
Cela veut-til dire que je suis bon pour passer par java.utils.jar.*?
Bonjour, Enfin, quand je parle de Repertoire, je parle de notion d'arborescence. Un jar, c'est un zip (grosso-modo), et le zip gere la notin d'arborescence. Je souhaite pouvoire recupérer une resourceStream sur un "repertoire" au sens jar. Mais j'en suis quitte pour passer par l'API Zp ou Jar
François
Salut,
Je ne sais pas trop ce que tu veux faire, mais tu me semble mal partie... Il n'y a pas de répertoire dans une un JAR, donc pas de moyen de lire.
Quel est ton objectif ? Il y a surement une autre façon de faire...
Black Myst
Bonjour, J'ai packagé une appli dans un jar, et dans mon code, je récupère un InputStream sur des fichiers de ce jar en utilisant le classique getResourceAsStream(FileName) de l'objet Class. Ca ca marche, pas de pb.
Or, je souhaite pouvoir lire le contenu d'un "repertoire" du jar, comme le fait la méthode "File.listFiles();"
Or , un getResourceStream() sur un repertoire du jar ne donne rien a priori. J'ai bien un InputStream, mais je peux rien en faire.
Pareil avec getResource(dirName). J'ai bien une URL qui "pointe" dans le jar, mais de toute façon, je peux rien en faire.
Donc:
InputStream is = this.getClass().getResourceAsStream("myDirInTheJar"); is.read() ==> throw exception
Exception in thread "main" java.lang.NullPointerException at java.io.FilterInputStream.read(FilterInputStream.java:66) at MainClass.main(MainClass.java:256)
Cela veut-til dire que je suis bon pour passer par java.utils.jar.*?
D'avance merci
François
Black Myst
Utiliser l'API zip pour explorer le contenu d'un JAR pour retrouver ses fichiers dans le classpath n'est pas une très bonne solution. C'est typiquement le genre de chose qui donne la migraine au moment du packaging de l'application.
D'ailleurs, j'imagine que ton application marchait très bien avec tous ses fichiers en FS, mais que ca ne marche plus depuis que tu essaie de la mettre dans un JAR. Et ça pourrait encore te poser des problèmes si tu essaie un jour de l'exécuter via WebStart ou de bidouiller le classpath/ClassLoader de quelque manière que ce soit.
Le classloader est responsable de trouver les ressources que demande ton application, mais il n'est pas possible de lui demander la liste des ressources disponibles. C'est pas toujours pratique, mais il faut faire avec.
Je ne sais pas exactement dans quel but tu cherche à connaître la liste des fichiers d'un répertoire, mais la bonne solution est de mettre la liste des fichiers/ressources dont ton application à besoin dans un fichier de configuration. Le classloader y accédera sans problème que ton application soit packagé dans un JAR, ou simplement en fichiers sur ton disque.
Black Myst
Bonjour, Enfin, quand je parle de Repertoire, je parle de notion d'arborescence. Un jar, c'est un zip (grosso-modo), et le zip gere la notin d'arborescence. Je souhaite pouvoire recupérer une resourceStream sur un "repertoire" au sens jar. Mais j'en suis quitte pour passer par l'API Zp ou Jar
François
Salut,
Je ne sais pas trop ce que tu veux faire, mais tu me semble mal partie... Il n'y a pas de répertoire dans une un JAR, donc pas de moyen de lire.
Quel est ton objectif ? Il y a surement une autre façon de faire...
Black Myst
Bonjour, J'ai packagé une appli dans un jar, et dans mon code, je récupère un InputStream sur des fichiers de ce jar en utilisant le classique getResourceAsStream(FileName) de l'objet Class. Ca ca marche, pas de pb.
Or, je souhaite pouvoir lire le contenu d'un "repertoire" du jar, comme le fait la méthode "File.listFiles();"
Or , un getResourceStream() sur un repertoire du jar ne donne rien a priori. J'ai bien un InputStream, mais je peux rien en faire.
Pareil avec getResource(dirName). J'ai bien une URL qui "pointe" dans le jar, mais de toute façon, je peux rien en faire.
Donc:
InputStream is = this.getClass().getResourceAsStream("myDirInTheJar"); is.read() ==> throw exception
Exception in thread "main" java.lang.NullPointerException at java.io.FilterInputStream.read(FilterInputStream.java:66) at MainClass.main(MainClass.java:256)
Cela veut-til dire que je suis bon pour passer par java.utils.jar.*?
D'avance merci
François
Utiliser l'API zip pour explorer le contenu d'un JAR pour retrouver ses
fichiers dans le classpath n'est pas une très bonne solution. C'est
typiquement le genre de chose qui donne la migraine au moment du
packaging de l'application.
D'ailleurs, j'imagine que ton application marchait très bien avec tous
ses fichiers en FS, mais que ca ne marche plus depuis que tu essaie de
la mettre dans un JAR. Et ça pourrait encore te poser des problèmes si
tu essaie un jour de l'exécuter via WebStart ou de bidouiller le
classpath/ClassLoader de quelque manière que ce soit.
Le classloader est responsable de trouver les ressources que demande ton
application, mais il n'est pas possible de lui demander la liste des
ressources disponibles. C'est pas toujours pratique, mais il faut faire
avec.
Je ne sais pas exactement dans quel but tu cherche à connaître la liste
des fichiers d'un répertoire, mais la bonne solution est de mettre la
liste des fichiers/ressources dont ton application à besoin dans un
fichier de configuration. Le classloader y accédera sans problème que
ton application soit packagé dans un JAR, ou simplement en fichiers sur
ton disque.
Black Myst
Bonjour,
Enfin, quand je parle de Repertoire, je parle de notion d'arborescence.
Un jar, c'est un zip (grosso-modo), et le zip gere la notin d'arborescence.
Je souhaite pouvoire recupérer une resourceStream sur un "repertoire" au
sens jar.
Mais j'en suis quitte pour passer par l'API Zp ou Jar
François
Salut,
Je ne sais pas trop ce que tu veux faire, mais tu me semble mal
partie... Il n'y a pas de répertoire dans une un JAR, donc pas de
moyen de lire.
Quel est ton objectif ? Il y a surement une autre façon de faire...
Black Myst
Bonjour,
J'ai packagé une appli dans un jar, et dans mon code, je récupère un
InputStream sur des fichiers de ce jar en utilisant le classique
getResourceAsStream(FileName) de l'objet Class. Ca ca marche, pas de pb.
Or, je souhaite pouvoir lire le contenu d'un "repertoire" du jar,
comme le fait la méthode "File.listFiles();"
Or , un getResourceStream() sur un repertoire du jar ne donne rien a
priori. J'ai bien un InputStream, mais je peux rien en faire.
Pareil avec getResource(dirName). J'ai bien une URL qui "pointe" dans
le jar, mais de toute façon, je peux rien en faire.
Donc:
InputStream is = this.getClass().getResourceAsStream("myDirInTheJar");
is.read() ==> throw exception
Exception in thread "main" java.lang.NullPointerException
at java.io.FilterInputStream.read(FilterInputStream.java:66)
at MainClass.main(MainClass.java:256)
Cela veut-til dire que je suis bon pour passer par java.utils.jar.*?
Utiliser l'API zip pour explorer le contenu d'un JAR pour retrouver ses fichiers dans le classpath n'est pas une très bonne solution. C'est typiquement le genre de chose qui donne la migraine au moment du packaging de l'application.
D'ailleurs, j'imagine que ton application marchait très bien avec tous ses fichiers en FS, mais que ca ne marche plus depuis que tu essaie de la mettre dans un JAR. Et ça pourrait encore te poser des problèmes si tu essaie un jour de l'exécuter via WebStart ou de bidouiller le classpath/ClassLoader de quelque manière que ce soit.
Le classloader est responsable de trouver les ressources que demande ton application, mais il n'est pas possible de lui demander la liste des ressources disponibles. C'est pas toujours pratique, mais il faut faire avec.
Je ne sais pas exactement dans quel but tu cherche à connaître la liste des fichiers d'un répertoire, mais la bonne solution est de mettre la liste des fichiers/ressources dont ton application à besoin dans un fichier de configuration. Le classloader y accédera sans problème que ton application soit packagé dans un JAR, ou simplement en fichiers sur ton disque.
Black Myst
Bonjour, Enfin, quand je parle de Repertoire, je parle de notion d'arborescence. Un jar, c'est un zip (grosso-modo), et le zip gere la notin d'arborescence. Je souhaite pouvoire recupérer une resourceStream sur un "repertoire" au sens jar. Mais j'en suis quitte pour passer par l'API Zp ou Jar
François
Salut,
Je ne sais pas trop ce que tu veux faire, mais tu me semble mal partie... Il n'y a pas de répertoire dans une un JAR, donc pas de moyen de lire.
Quel est ton objectif ? Il y a surement une autre façon de faire...
Black Myst
Bonjour, J'ai packagé une appli dans un jar, et dans mon code, je récupère un InputStream sur des fichiers de ce jar en utilisant le classique getResourceAsStream(FileName) de l'objet Class. Ca ca marche, pas de pb.
Or, je souhaite pouvoir lire le contenu d'un "repertoire" du jar, comme le fait la méthode "File.listFiles();"
Or , un getResourceStream() sur un repertoire du jar ne donne rien a priori. J'ai bien un InputStream, mais je peux rien en faire.
Pareil avec getResource(dirName). J'ai bien une URL qui "pointe" dans le jar, mais de toute façon, je peux rien en faire.
Donc:
InputStream is = this.getClass().getResourceAsStream("myDirInTheJar"); is.read() ==> throw exception
Exception in thread "main" java.lang.NullPointerException at java.io.FilterInputStream.read(FilterInputStream.java:66) at MainClass.main(MainClass.java:256)
Cela veut-til dire que je suis bon pour passer par java.utils.jar.*?
D'avance merci
François
Hervé AGNOUX
frisco wrote:
Cela veut-til dire que je suis bon pour passer par java.utils.jar.*?
Je pense que oui. Mais...
Perso en ce cas j'utilise une autre technique.
Je place dans le jar un zip, que j'accéde en tant que ressource. La première fois que l'appli se lance, je dézippe cette ressource dans un répertoire local. Puis j'accède à ces données en mode fichier, ce qui est largement plus pratique.
Cela nécessite plusieurs choses : avoir les droits d'écriture en local, être capable de détecter que l'appli se lance pour la première fois, et être capable de mémoriser le répertoire dans lequel on a dézipé le zip. (et, bien sûr, être capable de dézipper un zip).
Mais je trouve que le jeu en vaut la chandelle.
Cordialement.
-- Hervé AGNOUX http://www.diaam-informatique.com
frisco wrote:
Cela veut-til dire que je suis bon pour passer par java.utils.jar.*?
Je pense que oui. Mais...
Perso en ce cas j'utilise une autre technique.
Je place dans le jar un zip, que j'accéde en tant que ressource. La première
fois que l'appli se lance, je dézippe cette ressource dans un répertoire
local. Puis j'accède à ces données en mode fichier, ce qui est largement
plus pratique.
Cela nécessite plusieurs choses : avoir les droits d'écriture en local, être
capable de détecter que l'appli se lance pour la première fois, et être
capable de mémoriser le répertoire dans lequel on a dézipé le zip. (et,
bien sûr, être capable de dézipper un zip).
Cela veut-til dire que je suis bon pour passer par java.utils.jar.*?
Je pense que oui. Mais...
Perso en ce cas j'utilise une autre technique.
Je place dans le jar un zip, que j'accéde en tant que ressource. La première fois que l'appli se lance, je dézippe cette ressource dans un répertoire local. Puis j'accède à ces données en mode fichier, ce qui est largement plus pratique.
Cela nécessite plusieurs choses : avoir les droits d'écriture en local, être capable de détecter que l'appli se lance pour la première fois, et être capable de mémoriser le répertoire dans lequel on a dézipé le zip. (et, bien sûr, être capable de dézipper un zip).