2010-03-31 8 views
6

Voici ma structure:lecture du fichier xml dans un pot-paquet

  • com/mycompany/ValueReader.class
  • com/mycompany/ressources/values.xml

Je peux lire la fichier dans mon projet Eclipse, mais lorsque je l'exporte vers un fichier .jar, il ne trouve jamais le fichier values.xml.

J'ai essayé d'utiliser ValueReader.class.getResource() et ValueReader.class.getResourceAsStream() mais cela ne fonctionne pas.

Quel est le problème ici? Comment puis-je obtenir un objet-fichier dans mes valeurs.xml?

B.

+0

duplication possible de http://stackoverflow.com/questions/2504272/shipping-java-code-with-data-baked-into-the-jar – Kris

Répondre

8

Vous ne pouvez pas obtenir un objet File (car il est plus un fichier une fois qu'il est dans le .jar), mais vous devriez être en mesure d'obtenir un flux via getResourceAsStream(path);, où est path le complète chemin de votre classe.

par exemple.

/com/mycompany/resources/values.xml 
+0

Je l'ai essayé et cela n'a pas fonctionné. Votre approche était correcte. J'ai utilisé getResourceAsStream (chemin), mais au lieu de path = com/monentreprise/resources/values.xml, j'ai utilisé path = resources/values.xml et ça marche. Merci quand même! –

+3

cela n'a pas fonctionné parce que vous n'avez pas mis la barre oblique, ce qui signifie la racine du classpath. Sans cela, le chemin est relatif. – Bozho

+0

Ah vrai. Merci. Je n'oublierai jamais ça! –

-1

Vous pouvez extraire le pot alors prenez ce que vous voulez, dans le même chemin de classe en utilisant:

ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new 
FileInputStream(zipfile.getCanonicalFile()))); 
0

Cela fonctionne ...

Thread.currentThread().getContextClassLoader().getResource("com/mycompany/resources/values.xml") 
2

Vous ne pouvez pas obtenir un File pour le fichier car il est dans un fichier jar. Mais vous pouvez obtenir un flux d'entrée:

InputStream in = ValueReader.class.getResourceAsStream("resources/values.xml"); 

getResourceAsStream et getResource convertir l'ensemble de la classe à un chemin de fichier, puis ajouter l'argument. Cela donnera un flux pour le fichier au chemin /com/mycompany/resources/values.xml.