marces Geschrieben 23. September 2007 Geschrieben 23. September 2007 Hallo Liebe Forenmitglieder, ich hoffe sehr bei euch Hilfe zu finden. Ich habe da so ein kleines Problem mit (wie sollte es auch anders sein) Java. Erklärung: Ich habe ein sehr simples Programm, das per Tastendruck für sich selbst nach Updates suchen kann. Dazu stelle ich auf einem ohost-server (ohost.de) eine file zur Verfügung, die das Programm downloaded, abspeichert und darin nach den nötigen informationen sucht. Ungewollt hängt Java allerdings ein ÿ (mit ü-pünktchen!) ans Ende der Datei. Derzeit hatte ich das Problem gelößt, das sich einfach einen buchstaben am Ende in eine neue Zeile geschrieben hatte... somit wurde das ÿ an den Buchstaben gehangen und nicht an irgendwelche relevanten Werte siehe: updateDateiName2=vokabeln.voc updateZielPfad1=Eng/ updateZielPfad2=Ita/ pÿ Dieses ÿ muss allerdings jetzt weg. Da ich bei neueren Versionen ganze .class'es ersetzen muss, kann ich nicht mehr so ienen Pfusch machen. Verständlicherweise kommt die Datei dann Kaputt auf dem PC an ( mit dem ÿ halt) Hoffe, ihr könnt mir weiterhelfen Wäre euch zutiefst dankbar. Hier mal noch mein Downloadsource: public static void downloadFile(String url, String relativerPfad, boolean isRekursiv){ try { url.replaceAll("%20", " "); URL u = new URL(url); URLConnection urlc = u.openConnection(); InputStream is = urlc.getInputStream(); java.io.BufferedInputStream bis = new java.io.BufferedInputStream(is); File f = new File(Haupt.absoluterPfad+relativerPfad); OutputStream os = new FileOutputStream(f); int ch; do{ os.write(ch = bis.read()); }while (ch != -1); os.close(); is.close(); }catch(MalformedURLException e){ e.printStackTrace(); }catch (IOException e){ e.printStackTrace(); } MfG Belkner, Sebastian P.S.: habe schon so einige sachen probiert z.b.: substring(), while (ch != -1 && (char)ch != 'ÿ'); und diverse formatierungen der in-, und outputstreams.. half aber alles nichts Zitieren
flashpixx Geschrieben 23. September 2007 Geschrieben 23. September 2007 Hallo, auch unter der Gefahr, dass ich das jetzt nicht mehr richtig hinbekomme (ist schon spät): do { os.write(ch = bis.read()); } while (ch != -1); Du schreibst immer ein Zeichen und brichst danach die Schleife ab. D.h. wenn ch = -1 ist dann schreibst Du es noch, und erst dann kommt die Prüfung durch while. Also entweder die Schleife so ändern: while (!inputstream.eof) os.write HTH Phil P.S.: Keine Garantie wegen Müdigkeit Zitieren
frquadrat Geschrieben 24. September 2007 Geschrieben 24. September 2007 Beachte folgendes bei der Handhabung von Streams: 1) Wenn Du keine "Text-Daten" (mit ensprechendem Encoding etc.) handhaben willst, nutze direkt den InputStream bzw. OutputStream Du willst hier bytes lesen, und diese bytes (so, wie sie sind) wieder schreiben, oder? In dem Fall das mit dem BufferedInputStream besser sein lassen. 2) Lege einen Puffer an, und lese bzw. schreibe nicht zeichenweise, denn das ist enorm langsam. Eher sowas in der folgenden Richtung: byte[] buffer = new byte[1024]; int len = 0; while (len > -1) { len = in.read(buffer); if (len > 0) { out.write(buffer,0,len); } } Siehe hierzu auch in der Insel das Kapitel über das Kopieren mit FileOutputStream und FileInputStream Ich hoffe, die Hinweise helfen Dir. Zitieren
marces Geschrieben 27. September 2007 Autor Geschrieben 27. September 2007 Hallo, dankeschön für eure Hilfe. Nachdem ich flashpixx post las, war mir mein Fehler klar und hab dies umgeändert. Jetzt funktioniert es endlich =) Liebe Grüße Belkner, Sebastian Zitieren
flashpixx Geschrieben 29. September 2007 Geschrieben 29. September 2007 Danke für den netten Gruß Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.