2010-03-31 4 views
6

Hier ist meine Struktur:Lesen von XML-Datei in einem Glas-Paket

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

Ich kann lesen die Datei in meinem Eclipse-Projekt, aber wenn ich es in ein .jar exportiere, kann es die values.xml nie finden.

Ich versuchte mit ValueReader.class.getResource() und ValueReader.class.getResourceAsStream(), aber es funktioniert nicht.

Was ist das Problem hier? Wie bekomme ich ein Datei-Objekt zu meiner values.xml?

B.

+0

möglich duplicate von http://stackoverflow.com/questions/2504272/shipping-java-code-with-data-baked-into-the-jar – Kris

Antwort

8

Sie können keine File Objekt bekommen (da es nicht mehr ist eine Datei, sobald es in der .jar ist), aber man sollte es bekommen können, als ein Strom über getResourceAsStream(path);, wo path ist Der vollständige Pfad zu Ihrer Klasse.

z.B.

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

Ich versuchte es und es hat nicht funktioniert. Ihre Vorgehensweise war richtig tho. Ich habe getResourceAsStream (Pfad), aber anstelle von Pfad = com/Mycompany/resources/values.xml, ich habe path = resources/values.xml verwendet und es funktioniert. Danke trotzdem! –

+3

es hat nicht funktioniert, weil Sie nicht den führenden Schrägstrich, der die Wurzel des Klassenpfads bedeutet. Ohne es ist der Pfad relativ. – Bozho

+0

Ah wahr. Danke. Das werde ich nie mehr vergessen! –

-1

Sie das Glas extrahieren kann dann, was Sie wollen, in der gleichen Klasse-Pfad:

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

Dies funktioniert ...

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

Sie können nicht Holen Sie sich eine File für die Datei, weil es in einer JAR-Datei ist. Aber Sie können einen Eingabestrom erhalten:

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

getResourceAsStream und getResource wandeln das Paket der Klasse auf einen Dateipfad, dann auf das Argument hinzufügen. Dies ergibt einen Stream für die Datei unter Pfad /com/mycompany/resources/values.xml.