ich will ein File aus einer Jardatei lesen. Gelingt
ja auch alles ganz gut, solange kein Ausrufezeichen
im Pfad ist.
Aufruf des Programms auf Pfad c:\temp\test:
jar:file:/C:/TEMP/TestLoader.jar!/test.txt ... OK
Aufruf des Programms auf Pfad c:\temp\!test:
jar:file:/C:/TEMP/!test/TestLoader.jar!/test.txt ... Exception
Da scheint wohl der Ressourcenlader mit dem Ausrufezeichen
nicht zurecht zu kommen.
Wer kennt eine Lösung, die mir die Datei aus der Jardatei lädt ?
Danke und Servus
Michael
versuche es doch damit (hier als Beispiel für ein Icon). Wichtig ist,
dass die Datei im Klassenpfad liegt also im Jar gut erreichbar ist.
public ImageIcon readImageIcon(String filename) {
try {
URL url =
getClass().getClassLoader().getResource("data/swingimages/icons/" +
filename);
return new ImageIcon(url);
} catch (Exception ex){
System.out.println("icon not found: "+filename);
}
return null;
}
Andreas Bednarz
http://www.printx.org
grundsätzlich kann ich Files schon aus meiner Jardatei
lesen. Das Problem besteht nur, wenn im Pfad zur Jardatei (z.B.
c:\programme\!test) ein Ausrufezeichen ist.
Andreas Bednarz schrieb:
Michael Wagner wrote:
Das Problem tauchte schon mindestens einmal hier auf (Google?)
Vielleicht ist da eine Lösung dabei.
Ansonsten öffne das Jar als ZipFile, also ohne Protocol
und lies den Eintrag heraus.
Grüße
Peter
--
Shell&Jar : Individual icons for jars
jMineSweeper : extended
www.PeterBuettner.de
>>Da scheint wohl der Ressourcenlader mit dem Ausrufezeichen
>>nicht zurecht zu kommen.
>>
>>Wer kennt eine Lösung, die mir die Datei aus der Jardatei lädt ?
>
> Das Problem tauchte schon mindestens einmal hier auf (Google?)
> Vielleicht ist da eine Lösung dabei.
Google ist in diesem Falle vermutlich schlecht, weil "Resource aus Jar
laden" kommt sicher häufig vor, nur hier weiss der Poster ja wie es
geht, hat nur ein Problem mit einem Bug (würde ich zumindestens behaupten)
java.net.JarURLConnection schnippelt als Name der Resource einfach alles
nach dem ersten Ausrufezeichen ab, obwohl die Doku explizit sagt "!/ is
refered to as the separator". Im Paket "sun.net.www.protocol.jar" wird
das ganze noch richtig gemacht. Das ganze ist in JDK 1.5.0 Beta 1 noch
genau so. Zufällig jemand Lust das bei Sun zu melden (falls es da nicht
schon ist?)
Eine anständige Lösung für den OP habe ich auch nicht - ausser eben
keine Verzeichnisse mit "!" zu verwenden :-)
Nico
Michael Wagner spoke:
> Aufruf des Programms auf Pfad c:\temp\!test:
> jar:file:/C:/TEMP/!test/TestLoader.jar!/test.txt ... Exception
>
> Da scheint wohl der Ressourcenlader mit dem Ausrufezeichen
> nicht zurecht zu kommen.
In RFC 1630, der den Aufbau von URIs beschreibt
(http://www.faqs.org/rfcs/rfc1630.html), steht unter "OTHER RESERVED
CHARACTERS":
| The astersik ("*", ASCII 2A hex) and exclamation mark ("!" , ASCII
| 21 hex) are reserved for use as having special signifiance within
| specific schemes.
Und wenn ich das richtig verstanden habe, sind URLs eine Teilmenge der
URIs, insofern verhält sich der "Ressourcenlader" (was immer Du genau
damit meinst), schon richtig, wenn er Ausrufezeichen nicht im Pfad
zuläßt.
Wie man allerdings ein '!' in URLs richtig codiert, habe ich auf die
schnelle auch nicht gefunden.
Grüße,
tobi
--
URL: http://www.wartmal.de Email: ne...@wartmal.de
> >>Da scheint wohl der Ressourcenlader mit dem Ausrufezeichen
> >>nicht zurecht zu kommen.
> >>
> >>Wer kennt eine Lösung, die mir die Datei aus der Jardatei lädt ?
> >
> > Das Problem tauchte schon mindestens einmal hier auf (Google?)
> > Vielleicht ist da eine Lösung dabei.
>
> Google ist in diesem Falle vermutlich schlecht, weil "Resource aus Jar
> laden" kommt sicher häufig vor, nur hier weiss der Poster ja wie es
> geht, hat nur ein Problem mit einem Bug (würde ich zumindestens behaupten)
Man könnte ja noch ein "!" in die Suchanfrage schreiben !!!!1!
> java.net.JarURLConnection schnippelt als Name der Resource einfach alles
wäre ja recht einfach zumindest für Dateien auf dem lokalen System
zu lösen, (File(...).exists()).
Bei http und solchen urls kann man es ja nicht wissen. Doch kann man
annehmen das derjenige der dort einen Eintrag aus einem jar auslesen
will etwas wahrscheinlicher Einfluss auf die Pfadgestalltung hat,
im Gegensatz zu Pfadnamen auf Clientrechnern.
> nach dem ersten Ausrufezeichen ab, obwohl die Doku explizit sagt "!/ is
> refered to as the separator". Im Paket "sun.net.www.protocol.jar" wird
> das ganze noch richtig gemacht. Das ganze ist in JDK 1.5.0 Beta 1 noch
> genau so. Zufällig jemand Lust das bei Sun zu melden (falls es da nicht
> schon ist?)
Ich muss zugeben das ich überhaupt keine Lust habe Sun irgendeinen
Bug zu melden. Da ich so lese das die teilweise jahrelang nicht
korrigiert werden kommt mir das wie vertane Mühe vor. In dem Sinne
bin ich ganz klar für ein freieres Java.
> Eine anständige Lösung für den OP habe ich auch nicht - ausser eben
> keine Verzeichnisse mit "!" zu verwenden :-)
Ein naiver Versuch hilft auch nicht:
URL url = getClass().getResource("/resources/frame.gif");
System.out.println(url);
String s =url.toExternalForm().replaceFirst("!", "%21");
System.out.println(s);
try {url =new URL(s);}
catch (MalformedURLException e1) {e1.printStackTrace();}
System.out.println(url);
System.out.println(new ImageIcon(url)); << kein Stream
Also ZipFile/JarFile verwenden, oder ignorieren.
Beim Kunden krachts dann.
>>Google ist in diesem Falle vermutlich schlecht, weil "Resource aus Jar
>>laden" kommt sicher häufig vor, nur hier weiss der Poster ja wie es
>>geht, hat nur ein Problem mit einem Bug (würde ich zumindestens behaupten)
>
> Man könnte ja noch ein "!" in die Suchanfrage schreiben !!!!1!
Selbst +"/!" schein von google ignoriert zu werden :-(
> Ein naiver Versuch hilft auch nicht:
Hmm... bei mir geht das. (1.4.2_03, 1.5.0b1)
Nico
hatte ich auch nicht mit gerechnet, !"§$$%&//()=?@'*#+- ist wohl nicht
im Index, und ausser Entwicklern sucht da bestimmt keiner nach.
> > Ein naiver Versuch hilft auch nicht:
>
> Hmm... bei mir geht das. (1.4.2_03, 1.5.0b1)
Ernsthaft?
Also
c:\temp\versuch!\mein.jar
geht?
Hier 1.4.2_03/Win2k geht's ... nun auch.
Was wohl mit %XX im Pfad passiert?
Klappt anscheinend, und
versuch%12!
wird zu
versuch%2512!
also das % wird schön transformiert, nur das ! nicht
Eine wahrscheinlich sichere Lösung wäre also alle ! bis auf das
entscheidende durch %21 zu ersetzen. Was ist wohl mit ! innerhalb
des zip/jar passiert, möglicherweise findet ZipFile die nicht wenn
man die auch encoded?
Was 'ne Bastelei.