![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Neuer Benutzer Registriert seit: 28.06.2007
Beiträge: 6
|
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). |
| | |
| | Nach oben #2 |
| Neuer Benutzer Registriert seit: 28.06.2007
Beiträge: 6
|
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); } |
| | |
| | Nach oben #3 |
| Martin Eisengardt Registriert seit: 30.03.2006 Ort: Pfinztal
Beiträge: 355
|
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 |
| | |
| | Nach oben #4 |
| Neuer Benutzer Registriert seit: 28.06.2007
Beiträge: 6
|
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 |
| | |
| | Nach oben #5 |
| Martin Eisengardt Registriert seit: 30.03.2006 Ort: Pfinztal
Beiträge: 355
|
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 |
| | |
| | Nach oben #6 |
| Neuer Benutzer Registriert seit: 28.06.2007
Beiträge: 6
|
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();
Geändert von Ben (29.06.2007 um 15:14 Uhr). Grund: bbCode-Formatierung hinzugefügt |
| | |
| | Nach oben #8 |
| Martin Eisengardt Registriert seit: 30.03.2006 Ort: Pfinztal
Beiträge: 355
|
Ä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 |
| | |
| | Nach oben #9 |
| Neuer Benutzer Registriert seit: 28.06.2007
Beiträge: 6
|
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);
}
Geändert von Ben (30.06.2007 um 15:11 Uhr). Grund: Code-Tags hinzugefügt |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ä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 |