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
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
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.
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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden