FileInputStream relativer Pfad in .jar

mazyd

Mitglied
Hallo!

Ich habe ein kleines Problem mit dem FileInputStream. Ich möchte eine mp3 mit dem Player von Javazoom abspielen.
Das funktioniert in Eclipse auch relativ gut, aber halt nur relativ.
Das Problem dabei ist, dass der Player einen FileInputStream bekommt (für Musik auch ne ganz gute Variante).
Hier mal der kleine Codeschnipsel, um den es geht:


Java:
FileInputStream fis = null;
System.out.println(this.getClass().getResource("/res/music/girls.mp3"));
String urlString = this.getClass().getResource("/res/music/girls.mp3").toString();
urlString = urlString.replaceAll("file:", "");
try {
	fis = new FileInputStream(urlString);
} catch (FileNotFoundException e) {
	e.printStackTrace();
}
		
try {
	mp3Player = new Player(fis);
} catch (JavaLayerException e) {
	e.printStackTrace();
}

So, nun gibt mir
Java:
System.out.println(this.getClass().getResource("/res/music/girls.mp3"));

als Rückgabe "file:<richtigerPfad>/girls.mp3"
zurück.

Alles schön und gut, aber der FileInputStream findet die Datei nicht. Ich habe dann herausgefunden, dass wenn ich das "file:" am Anfang wegnehme, der ganze Spaß abgespielt wird.
Daher auch

Java:
urlString = urlString.replaceAll("file:", "");

Okay, also funktioniert das schon mal...

Problem ist nun, dass ich das gerne in eine .jar packen würde (soll ein Geschenk für meine Freundin werden)...
Die Musik wird mit in der .jar exportiert und ist auch an der richtigen Stelle (bzw. weiß ich, an welcher Stelle sie nach dem Exportieren ist).

Jetzt ist der Pfad natürlich:
"jar:file:<Pfad zur jar>/kalender.jar!/<Pfad zur Datei>/girls.mp3"

An sich total korrekt, aber unangenehme Sache dabei ist, dass der FileInputStream wohl (bei mir) nicht klar kommt mit dem jar:file:...

Nehme ich das raus, kann er auch nicht in die jar.

Ich hoffe, dass das Problem klar geworden ist...

Wenn ich statt FileInputStream einfach File nehme, dann findet er die File, aber dann müsste ich warten, bis das gesamte Lied in den Speicher geladen wurde, bevor ich's abspielen kann, weil's sonst ja echt mies klingt, daher würde ich ungern auf den Stream verzichten.

Also kann man irgendwie einen Pfad zu einer Datei in einer jar für den FileInputStream angeben?

Randinfo:
OS: Ubuntu
IDE: Eclipse
 
Also kann man irgendwie einen Pfad zu einer Datei in einer jar für den FileInputStream angeben?
Leider nein. Der FileInputStream zeigt auf eine Datei (in dem Fall das jar selbst). An die Dateien in dem jar kommst Du anders heran.

Es würde mich aber wundern, wenn die Klasse Player wirklich unbedingt einen FileInputStream braucht und nicht einen beliebigen. Habe deswegen gegoogelt und das hier gefunden: Player
Ist das das, was Du benutzt? Dann kannst Du einen beliebigen InputStream übergeben. Du warst mit dem hier:
Java:
System.out.println(this.getClass().getResource("/res/music/girls.mp3"));
schon recht nah dran. Probier mal folgendes:
Java:
final String mp3Path = "/res/music/girls.mp3";

final InputStream mp3In = getClass().getResourceAsStream(mp3Path);

final Player mp3Player = new Player(mp3In);
 
JAAAA!

Du bist es! Du hast mir gerade mit dem Post so dermaßen weitergeholfen...
Ich sitze bestimmt seit einer Woche an dem Problem und war einfach zu blöd 🙁

Vielen, vielen Dank! Es funktioniert wunderbar!
 

Neue Themen


Zurück
Oben