Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Java > Allgemeine Java-Programmierung > Dateien aus .jar Files holen
Antwort
 
Themen-Optionen
Alt 28.06.2007, 16:36   Nach oben    #1
Neuer Benutzer
 
Registriert seit: 28.06.2007
Beiträge: 6
Standard Dateien aus .jar Files holen

Hi zusammen!
Brauche dringend Hilfe bei einem Problem. Mein erstelltes Programm benötigt zur Laufzeit Zugriff auf Dateien im .jar File um diese Lokal auf der Festplatte abzuspeichern. Erwartet wird vom Programm ein "File", jetz stellt sich mir die Frage wie ich das am dümmsten mache.
Die interessante Stelle in meinem Quellcode sieht momentan folgendermaßen aus (Funktioniert nicht

File bottom = new File("resource" + System.getProperty("file.separator") + "album_design" + System.getProperty("file.separator") + "album_bottom.jpg"); //Quelldatei im .jar File
File bottomDest = new File(albumDesignDir.getAbsolutePath() + System.getProperty("file.separator") + "album_bottom.jpg"); //Zieldatei auf der lokalen Festplatte

Die benötigte Datei ist im jar-File im Unterverzeichnis \resource\album_design\ abgelegt
Ich hoffe ihr könnt mir helfen.


Geändert von SoulReaper (28.06.2007 um 19:46 Uhr).
SoulReaper ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.06.2007, 19:45   Nach oben    #2
Neuer Benutzer
 
Registriert seit: 28.06.2007
Beiträge: 6
Standard

Folgender Ansatz funkrioniert auch nicht -.- das erstellte File ist dann 0 Byte groß.

input = RePickCreateGalery.class.getClassLoader().getResou rceAsStream("resource" + System.getProperty("file.separator") + "album_design" + System.getProperty("file.separator") + "album_bottom.JPG");
output = new FileOutputStream(bottomDest);
byte[] buffer = new byte[4096];
int length;
while((length = input.read(buffer)) > 0)
{
output.write(buffer,0,length);
}
SoulReaper ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.06.2007, 23:08   Nach oben    #3
Erfahrener Benutzer
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

Wieso wird ein File erwartet? Um was lokal auf die Platte zu speichern, braucht man normalerweise nur einen InputStream. Und das gibt dir der ClassLoader. Rest siehe http://www.rgagnon.com/javadetails/java-0064.html
und nun etwas Transferleistung.

Achja: Jar muss im ClassPath drin sein, respektive dem verwendeten ClassLoader bekannt sein. Und versuchs mal mit nem Slash auch am Anfang...
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.06.2007, 00:18   Nach oben    #4
Neuer Benutzer
 
Registriert seit: 28.06.2007
Beiträge: 6
Standard

Wie in meinem 2ten Post erwähnt hab ich genau die von dir verlinkte Lösung schon versucht. Nur dass ich keinen FileInputStream sondern nur einen InputStream verwende, den ich ja vom ClassLoader bekomme. Die Datei existiert dann zwar, hat aber 0 Byte.
Ein Slash am Anfang ändert leider auch nichts das hab ich als Erstes versucht.
SoulReaper ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.06.2007, 07:20   Nach oben    #5
Erfahrener Benutzer
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

Flush/ Close? Alles drin? Wie sieht dein kompletter Code nun aus?

Zudem bestehtder Link aus zwei Beispielen, das nur am Rande...
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.06.2007, 15:12   Nach oben    #6
Neuer Benutzer
 
Registriert seit: 28.06.2007
Beiträge: 6
Standard

So sieht mein quellcode nun aus:
Code:
InputStream input;
OutputStream output;

input = RePickCreateGalery.class.getClassLoader().getResourceAsStream(System.getProperty("file.separator") + "resource" + System.getProperty("file.separator") + "album_design" + System.getProperty("file.separator") + "album_bottom.JPG");
	    	
output = new FileOutputStream(bottomDest);
byte[] buffer = new byte[4096];
int length;
while((length = input.read(buffer)) != -1)
{
	   output.write(buffer,0,length);
}
input.close();
output.close();
die zweite Lösung mit den Channels kann ich auf einen InputStream den mir der Classloader liefert nicht anwenden, da die Channels nur vom FileInputStream angeboten werden.

Geändert von Ben (29.06.2007 um 15:14 Uhr). Grund: bbCode-Formatierung hinzugefügt
SoulReaper ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.06.2007, 18:33   Nach oben    #7
Neuer Benutzer
 
Registriert seit: 28.06.2007
Beiträge: 6
Standard

es ist zum heulen ^^ zwei tage stress und alles nur weil man / und \ vertauscht. problem gelöst ^^ danke für die hilfe
SoulReaper ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.06.2007, 09:42   Nach oben    #8
Erfahrener Benutzer
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

Ähhhm Ja. Dann hast du aber eine Exception ignoriert/verschluckt/nicht ausgegeben oder? IMHO sollte da ne wilde Exception fliegen, weil du dann vom Classloader nichts gültiges zurückkriegst. Wenn dem so ist, hast du mit dem Verschweigen auch mich irgendwie nicht mit der Nase drauf gestuppst.

Ausserdem bin ich Linuxler und merke das nicht, dass du da Backslashes hast. Noch ein kleiner Tip: Statt System.getProperty("file.separator") kannst du auch auf die Methoden der Klasse FileSystem zugreifen, denn die System Properties kann man theoretisch überschreiben, was nicht unbedingt zielführend für deinen Anwendungsfall ist.
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.06.2007, 14:56   Nach oben    #9
Neuer Benutzer
 
Registriert seit: 28.06.2007
Beiträge: 6
Standard

Vielleicht ist es ja jemandem eine Hilfe, so sieht meine Lösung jetz aus:

Code:
InputStream input;
OutputStream output;
		          
input=getClass().getResourceAsStream("/resource/album_design/album_bottom.JPG");
output = new FileOutputStream(bottomDest);
	    
byte[] buffer = new byte[4096];
int length;
while((length = input.read(buffer)) != -1)
{
     output.write(buffer,0,length);
}
eine exception hat mir eclipse nie ausgegeben, hat einwandfrei funktioniert -.- die Probleme traten erst auf als ich ein jar erstellen wollte.

Geändert von Ben (30.06.2007 um 15:11 Uhr). Grund: Code-Tags hinzugefügt
SoulReaper ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Dateien aus SVN 1 auschecken, in SVN 2 einchecken, keine eigenen Änderungen vorhanden Ben Tools, Server, Betriebssysteme 2 21.03.2007 18:53
Cache leeren um mit file Dateien zu durchsuchen Tryzero PHP-Programmierung 12 12.03.2007 10:13
[PHP] FTP-Funktionen in PHP nutzen MrNiceGuy Tutorials 0 24.05.2006 14:18
files lassen sich nicht überschreiben mark555 PHP-Programmierung 9 09.01.2006 07:15
.jar, hsqldb und Hibernate Jasper Datenbanken 1 06.08.2005 08:45


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:41 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44