2013-04-12 7 views
5

Ich versuche, aus einer Datei zu lesen, die in einem JAR zusammen mit der Klasse, die es liest, verpackt ist. Dazu verwende ich die folgenden:Datei aus JAR lesen funktioniert nicht unter Windows

getClass().getClassLoader().getResourceAsStream(file) 

Das funktioniert gut, wenn ich erstellen und die JAR-Datei auf OSX laufen, aber wenn ich die JAR-Datei auf Windows erstellen und ausführen, die über der Linie null zurück.

Fehle ich hier etwas? Wenn ich das JAR unter OSX erzeuge und es unter Windows laufe, funktioniert es einwandfrei. Das Problem tritt nur auf, wenn ich das JAR unter Windows erstelle.

EDIT: Es ist erwähnenswert, dass es keine Ordnerhierarchie innerhalb der JAR-Datei gibt. Alles ist auf einer Ebene gespeichert, daher befindet sich die Klasse, die die Datei liest, und die Datei selbst im selben Verzeichnis. Darüber hinaus ist dies, wie ich die JAR-Datei bin erstellen, sowohl auf OSX und Windows:

jar -cmf manifest.mf run.jar *.class file1 file2 

EDIT 2: Die Datei-I ist eine Java-.properties-Datei zu laden versuchen. Ich nehme an, dass das nicht das Problem verursacht?

+0

Jar-Dateien sind Zip-Dateien, mit denen Sie die von Windows erstellte Version überprüfen können. Benennen Sie es mit einer ZIP um und durchsuchen Sie dann mit Windows Explorer. –

+0

@NathanielWaisbrot was genau? Dass die Dateien alle da sind? Ich habe das überprüft (mit jar -tf stattdessen), und sie sind definitiv alle da, in der Struktur, die ich in der Frage beschrieben – Kumalh

+0

Sie sagen, dass ein Jar auf dem Mac unter Windows gebaut, aber ein Glas auf Windows gebaut funktioniert nicht. Vergleichen Sie den Inhalt der beiden JAR-Dateien. Wenn Sie die gleiche Version von Java verwenden, sollten die .class-Dateien identisch sein. –

Antwort

0

Überspringen Sie den Classloader-Teil. Nur getClass(). GetResource ....

+0

Ich würde 'Classloader.getSystemResource()' –

+0

Ich habe das auch versucht. Gleiche Ergebnisse: funktioniert unter OSX, nicht unter Windows. Ich habe auch versucht 'this.getClass(). GetResourceAsStream (" \ file ");', aber das hat auch nicht funktioniert – Kumalh

+0

Aha! Verwenden Sie keine Pfadtrennzeichen. Nur der Dateiname. –

0

Versuchen Sie es auf diese Weise getClass(). GetResourceAsStream ("/ file1").

Verwandte Themen