Florian: char in string umwandeln.....irgendwas mache ich falsch.

hallo zusammen,

ich möchte gerne aus einem internetstream den dateiinhaltabbilden. auf der kommandozeile ist das auch soweit kein problem.

system.out.print((char)c); wirft mir das raus.

wenn ich das nun aber gerne in einem textarea darstellen möchte und ich forme das ganze um, dann bleibt es leer. gibt es dafür ne erklärung?

hier noch kurz der quelltext zur abfrage im inet:

try {
                URL url = new URL ("http://www.domain.tld/");
                Reader s = new InputStreamReader(url.openStream());
                int c;
                while ( (c = s.read()) != -1) {
                   System.out.print((char)c);
                }
                s.close();
                }
                catch (Exception e)
                {
                   System.out.println(e);
                }

  1. try {
                    URL url = new URL ("http://www.domain.tld/");
                    Reader s = new InputStreamReader(url.openStream());
                    int c;
                    while ( (c = s.read()) != -1) {
                       System.out.print((char)c);
                    }
                    s.close();
                    }
                    catch (Exception e)
                    {
                       System.out.println(e);
                    }

    Wo genau ist der Part mit der Textarea?

  2. Hallo,

    try {
                    URL url = new URL ("http://www.domain.tld/");
                    Reader s = new InputStreamReader(url.openStream());
                    int c;
                    while ( (c = s.read()) != -1) {
                       System.out.print((char)c);
                    }
                    s.close();
                    }
                    catch (Exception e)
                    {
                       System.out.println(e);
                    }

    Ich sehe hier nichts von irgend einer TextArea. Es ist sinnlos,
    offensichtlich funtkionierenden Code zu posten. Probier's mal mit dem
    Code, der nicht funktioniert.

    Insbesondere auch die von dir erwähnte "Umformung" wäre interessant.

    Gruß
    Slyh

    1. Hallo,

      try {
                      URL url = new URL ("http://www.domain.tld/");
                      Reader s = new InputStreamReader(url.openStream());
                      int c;
                      while ( (c = s.read()) != -1) {
                         System.out.print((char)c);
                      }
                      s.close();
                      }
                      catch (Exception e)
                      {
                         System.out.println(e);
                      }

      Ich sehe hier nichts von irgend einer TextArea. Es ist sinnlos,
      offensichtlich funtkionierenden Code zu posten. Probier's mal mit dem
      Code, der nicht funktioniert.

      Insbesondere auch die von dir erwähnte "Umformung" wäre interessant.

      Gruß
      Slyh

      hi also dann mal der code, der übrigens fehlerfrei durch den compiler saust:

      try {
               URL url = new URL ("http://www.domain.tld/");
               Reader s = new InputStreamReader(url.openStream());
               int c;
               char ch;
               while ( (c = s.read()) != -1) {
                      ch = (char)c;
                      ta.setText((new Character(ch).toString()));

      // ta ist die textarea //

      }
               s.close();
               }
               catch (Exception e)
               {
                         System.out.println(e);
               }

      1. Hallo,

        try {
                 URL url = new URL ("http://www.domain.tld/");
                 Reader s = new InputStreamReader(url.openStream());
                 int c;
                 char ch;
                 while ( (c = s.read()) != -1) {
                        ch = (char)c;
                        ta.setText((new Character(ch).toString()));

        Das letzte Zeichen, das du von domain.tld einliest, ist vermutlich
        einen Zeilenumbruch. Und wenn du dir mal den Text ausgeben würdest,
        der nach Durchlauf der while-Schleife in der TextArea stehst, würdest
        du sehen, daß dort (vermutlich) nur genau dieser eine Zeilenumbruch
        steht.
        Warum? Weil setText den gesamten Text _ersetzt_, und nicht etwa anhängt.
        Nehmen wir an, da würde "Hallo" im Stream geliefert werden.
        Dann würde jetzt nacheinander "H", "a", "l", "l" und "o" in die TextArea
        geschrieben werden -- ersetzend. Zum Schluß würdest du deshalb
        natürlich nur "o" sehen.

        Verwendest du JTextArea oder TextArea? Du solltest JTextArea verwenden.
        Dort gibt es eine Methode "append(String)". Die tut das, was du willst,
        nämlich Strings zur TextArea hinzufügen.

        Allerdings ist das hoooochgradig unperformant.

        Was du stattdessen tun solltest: Lies die Daten, die da vom InputStream
        kommen, komplett in einen String ein und weise diesen _nach_ der
        while-Schleife der TextArea zu. Dann wieder mit setText(String).

        ta.setText((new Character(ch).toString()));

        Hier erzeugst du übrigens bei jedem(!) eingelesenen Zeichen ein
        Character-Objekt, nur um direkt danach daraus jedesmal(!) einen
        String zu bauen.

        Mal davon abgesehen, daß die Erzeugung eines String-Objekts bei jedem
        Durchlauf hochgradig unperformant und ressourcenfressend ist, ist
        die Erzeugung des Character-Objektes völlig unnötig, da die Klasse
        Character eine statische Methode toString(char) bietet, die genau
        dasselbe tut, nämlich den übergebenen char in einen String umwandelt.

        Also:
           ta.setText(Character.toString(ch));

        Aber, wie gesagt, daß solltest du ohnehin nicht so tun...

        Gruß
        Slyh

        1. Hallo

          Was du stattdessen tun solltest: Lies die Daten, die da vom InputStream
          kommen, komplett in einen String ein und weise diesen _nach_ der
          while-Schleife der TextArea zu. Dann wieder mit setText(String).

          das würde für mich als java-newbie dann so aussehen:

          textstring = textstring + (char)c;

          oder doch eher so:

          textstring += (char)c;

          kannst du mir da eventuell eine lösung für geben?

          1. Hallo,

            das würde für mich als java-newbie dann so aussehen:

            textstring = textstring + (char)c;

            oder doch eher so:

            textstring += (char)c;

            kannst du mir da eventuell eine lösung für geben?

            Das solltest du so nicht tun. Einfach weil String-Objekt immutable
            (zu Deutsch: unveränderlich) sind, und somit bei jeder Zuweisung zuerst
            ein neues String-Objekt erzeugt wird. (In deinem Java-Buch ist dieses
            besondere Verhalten der String-Klasse genauer beschrieben.)

            Im Grunde liegst du aber nicht so falsch.

            Die Klasse StringBuffer (auch im Package java.lang) ist dafür gedacht,
            veränderliche Strings zu halten. Hier gibt es wieder eine Methode
            "append(char)".

            So richtig performant ist es dadurch trotzdem nicht. Stell dir vor, da
            kommt eine HTML-Datei mit 20KB zurück. Das entspricht ca. 20.000
            Zeichen. Damit würde 20.000 mal die append-Methode aufgerufen werden.

            Du könntest deinen InputStreamReader noch in einen BufferedReader
            packen. Der bietet dann eine Methode readLine(). Damit liest du
            zum einen die Daten gepuffert ein. Zum anderen zeilenweise. Diese
            einzelnen Zeilen könntest du dann entweder über eine der beiden
            genannten append-Methoden entweder zur JTextArea oder zum genannten
            StringBuffer hinzufügen. (Nicht vergessen, daß readLine() den
            Zeilenumbruch am Ende wegwirft.)

            Dein Java-Buch wird dir mit den von mir genannten Stichworten bestimmt
            konkret weiterhelfen können.

            Gruß
            Slyh

            1. hallo,

              erst mal danke für die infos. hab nur kein java-buch.....man googled sich so durchs leben und versucht von c++ und php zu übersetzen... ;-))

              ich werde mal gucken, ob ich das hinbekomme.

              1. Hallo,

                erst mal danke für die infos. hab nur kein java-buch.....

                Nicht? Das ist schlecht!

                Aber dem kann abgeholfen werden. Es gibt nämlich zwei hervorragende
                kostenlose Bücher zu Java:
                http://javabuch.de/
                http://www.galileocomputing.de/openbook/javainsel/

                Anders lernst du die Sprache nicht richtig!

                Gruß
                Slyh