Datei-Kopierprogramm
lima-city → Forum → Programmiersprachen → Java
bild
bit
bug
code
datei
datum
eins
empfangen
fehler
http
import
mime
programmieren
quelle
server
test
text
url
verwenden
ziel
-
Ich wollte ein einfaches Kopierprogramm zum Kopieren von Daten aller Art aus dem Internet programmieren
Mein Quelltext sieht so aus:
import java.io.*; import java.net.*; public class download { public static void main(String args[]) { try { URL url = new URL("http://www.pueschel.lima-city.de/kopf.gif"); BufferedInputStream quelle = new BufferedInputStream(url.openConnection().getInputStream()); BufferedOutputStream ziel = new BufferedOutputStream(new FileOutputStream("test.gif")); int gelesen; while((gelesen = quelle.read()) != -1) { ziel.write(gelesen); } quelle.close(); ziel.close(); } catch(Exception e) { System.out.println("Fehler: "+e); } } }
Bei manchen Dateien klappt es(Text)
Bei Bildern (wie dieses) klappt es nicht.
Was mache icht falsch?
Warum wird das Bild nicht eins zu eins kopiert? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
ich könnte mir nur folgendes vorstellen :
1.) wie du gesagt hast : fehlerhafte dateinamenerweiterung
2.) falsche daten *z.B. wenn der server ne fehlermeldung mit MIME plain/text oder plain/html sendet und du versuchst diese als bild oder formatted/anything zu speichern
3.) server-fehler
4.) simpler denkfehler
ich würde das hier sowiso GANZ anders lösen ...
1.) ich würde anstatt URL lieber nativen SOCKET verwenden ...
2.) ich würde um gotteswillen keine BUFFEREDSTREAMS verwenden sondern dierekt native STREAMS ... diese liefern sogar 8-bit konstant ... und müssen nicht wie BUFFERED darauf warten bist der buffer *meist 16-bit* vollgeschrieben ist bevor sie die daten frei geben
3.) ok . .es ist mühselig .. aber bei meiner variante würde man auch den HTTP/1.1-Header mit empfangen und könnte aus diesem gleich MIME-TYPE und File-Length auslesen *bei besonderen servern und verfahren auch CRC-32 prüfsumme sowie das ganz bandbreiten schonender als GZIP oder BZ2 komprimierte variante ...
4.) dessweitern würde ich noch eine GUI programmieren um den speicherplatz sowie den namen auszuwählen ... den daten-typ *also die dateinamenerweiterung* sollte dann jedoch fest sein und bei GZIP / BZ2 daten gleich von deiner app dekomprimiert oder halt als GZIP / BZ2 archiv gespeichert werden ...
wenn du willst könnte ich mich an sowas mal ransetzen und dir einen relativ einfachen code zusammen basteln *einfach im sinne von : alle exception bis main thrown und main throwed dann selber an die console ... GUI einfach nur die elemten mit einem GRIDBAG in logische struktur bringen .... bytecode nicht "sauber" geproggt sowie keine bugs entfernt ... -
Ich habe auch so etwas schon mal probiert, habe aber
immer anstatt des Bildes die Meldung bekommen, dass
die IP-Adresse ... nicht gefunden wurde.
Zeig du mir mal wie ich einen Socket zu einer bestimmten Adresse aufstelle und
wie du das ausliesst.
Und noch was,
ich möchte bei meinem Downloader die Größe im voraus wissen,
da der Empfang bei großen Dateien lange dauert und ich erst eine
Fortschrittsanzeige brauche, damit der Nutzer auch weiß, wie lange das noch dauert. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage