Textdatei in Jar Problem

Network

Top Contributor
Hi,

Das Thema wird im Internet sehr oft angesprochen und hatte damit eig. auch keine Probleme. Doch jetzt ist beim lesen der Datei aus der Jar ein Problem aufgetreten.
Ich kann nicht mehr darauf zugreifen und es kommt die Fehlermeldung dass die Datei nicht gefunden werden kann.

Die Bilder kann ich aus der Jar laden, dass mache ich so:
Java:
imgs[i] = ImageIO.read( getClass().getResource("/Loader/38_frame" + (i) + ".png") );

Die Textdatei möchte ich so laden:
Java:
BufferedReader br = new BufferedReader(
new InputStreamReader(Launcher.class.getResourceAsStream("/AppSettings.ini")));
Wenn ich das Programm in Eclipse starte, funktioniert alles. Wenn ich es jedoch dann als Programm exportiere nicht mehr.

Kleine Zusatzinformation: Ich weiss nicht, wie man solche Extradateien in die Jar mitpacken lässt. Hab den Ordner mit den Bildern und die AppSettings.ini ins bin und src Verzeichnis gelegt.
Nach dem packen, packe ich die Datei&Ordner mit WinRar in die Jar, evt. liegt da ja der Fehler! Die Bilder aber funktionieren ja 🙁

Vielen Dank
& Viele Grüße
Network
 
Du kannst eclipse sagen welche Dateien und/oder Ordner es mit in die jar datei packen soll. Du musst die also nicht immer per Hand reinkopieren.
Wenn du die Datei so
Java:
Launcher.class.getResourceAsStream("/AppSettings.ini")
ansprichst, dann muss die ini Datei im selben package wie die Launcher class liegen. (Den führen slash kannst auf afaik weglassen?)
 
Bei deiner Angabe, darf die AppSettings.ini in keinem Ordner innerhalb der .jar liegen. Wie schaut den die Ordnerstruktur darin aus? Liegt die AppSettings relativ zum launcher? Dann lass mal das führende [c]/[/c] weg und versuche es dann.

Mit Eclipse kann man seine exports anpassen, dazu gibt es tausende tutorials im Internet und auch hier im Forum. Einfach mal den Wizzard für "Export as Jar" nehmen und nicht vergessen, die main mit anzugeben.


[...]Wenn du die Datei so
Java:
Launcher.class.getResourceAsStream("/AppSettings.ini")
ansprichst, dann muss die ini Datei im selben package wie die Launcher class liegen.
Nein, afaik bedeutet das führende [c]/[/c] dass es sich eben um keinen relativen Pfad handelt. In diesem Falle wird die Datei also im "root-verzeichnis" des Jars gesucht.
 
Zuletzt bearbeitet von einem Moderator:
Danke erstmal =)

Bei deiner Angabe, darf die AppSettings.ini in keinem Ordner innerhalb der .jar liegen. Wie schaut den die Ordnerstruktur darin aus? Liegt die AppSettings relativ zum launcher? Dann lass mal das führende [c]/[/c] weg und versuche es dann.

Mit Eclipse kann man seine exports anpassen, dazu gibt es tausende tutorials im Internet und auch hier im Forum. Einfach mal den Wizzard für "Export as Jar" nehmen und nicht vergessen, die main mit anzugeben.

Nein, afaik bedeutet das führende [c]/[/c] dass es sich eben um keinen relativen Pfad handelt. In diesem Falle wird die Datei also im "root-verzeichnis" des Jars gesucht.
Du kannst eclipse sagen welche Dateien und/oder Ordner es mit in die jar datei packen soll. Du musst die also nicht immer per Hand reinkopieren.
Wenn du die Datei so
Java:
Launcher.class.getResourceAsStream("/AppSettings.ini")
ansprichst, dann muss die ini Datei im selben package wie die Launcher class liegen. (Den führen slash kannst auf afaik weglassen?)

Ja, wenn man das
Code:
/
weglässt, sucht das Programm im Ordner selbst wo die Jar liegt und nicht in der Jar selbst!
Also das ganze ist so aufgebaut, dass die ganzen .class Dateien & die AppSettings.ini in der selben Ebene liegen, dazu noch der Ordner mit den Bildern und 2 Ordnern die Eclipse anglegt...
Also in der Jar ist die AppSettings.ini gleich die Nachbardatei zur Launcher.class
 
Network hat gesagt.:
Kleine Zusatzinformation: Ich weiss nicht, wie man solche Extradateien in die Jar mitpacken lässt.
Das teilst Du Eclipse mit, indem Du den Ordner, in dem die Extradateien drinnen liegen auch zu einem Source-Folder machst. Dafür machst Du rechte Maustaste auf das Project -> Properties -> Java Build Path -> Reiter "Source" -> Add Folder. Als Ordnerstruktur hat sich durchgesetzt, dass man Java-Sourcen unter src/main/java und Extradateien unter src/main/resources abspeichert.
 
Ja, wenn man das
Code:
/
weglässt, sucht das Programm im Ordner selbst wo die Jar liegt und nicht in der Jar selbst!
Die Aussage wage ich mal anzuzweifeln ;-)
Aus der API Doku zu getResourceAsStream:
Before delegation, an absolute resource name is constructed from the given resource name using this algorithm:

If the name begins with a '/' ('\u002f'), then the absolute name of the resource is the portion of the name following the '/'.
Otherwise, the absolute name is of the following form: modified_package_name/name
Where the modified_package_name is the package name of this object with '/' substituted for '.' ('\u002e').
Class (Java Platform SE 6)
 

Zurück
Oben