turgar: Internetseite einlesen und wieder ausgeben

Hallo,

ich versuche gerade eine Internetseite (also den Quelltext) einzulesen und dann wieder lokal auszugeben.
Aber ich mach wohl mal wieder irgendwas total falsch:

  
try  
   {  
    URL url = new URL(v);  
    //BufferedReader br = new BufferedReader(new StringReader())  
    BufferedInputStream stream = new BufferedInputStream(url.openStream());  
  
    while(stream != null)  
    {  
     System.out.println(stream.toString());  
    }  
   }  
   catch(Exception e)  
   {  
    System.out.println(e.getMessage());  
    e.printStackTrace();  
   }  

Wie muss der entsprechende Textabschnitt richtig lauten?
Danke!

  1. Moin Moin!

    Hallo,

    ich versuche gerade eine Internetseite (also den Quelltext) einzulesen und dann wieder lokal auszugeben.
    Aber ich mach wohl mal wieder irgendwas total falsch:

    Fehlermeldungen? Ausgabe?

    (Und ohne Java: wget http://www.example.com/ oder lynx -source http://www.example.com/, wenn dir echo -en "GET / HTTP/1.0\r\n\r\n" | nc www.example.com 80 zu umständlich ist.)

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
  2. Hallo,

    try
       {
        URL url = new URL(v);
        //BufferedReader br = new BufferedReader(new StringReader())
        BufferedInputStream stream = new BufferedInputStream(url.openStream());

    while(stream != null)
        {

      
    Die Variable 'stream' wird wohl nie null werden, da du sie ja niemals auf  
    null setzt, oder? Von alleine passiert das nicht.  
      
    
    > ~~~java
      
    
    >      System.out.println(stream.toString());  
    > 
    
    

    Hier rufst du die toString()-Methode des Stream auf, die Informationen
    zum Objekt und nicht zu den gestreamten Daten ausgibt...

    http://www.exampledepot.com/egs/java.net/ReadFromURL.html

    Gruß
    Slyh

  3. Hallo,

    ich habe so etwas mal gebastelt. Das Bsp funktioniert und speichert den Inhalt in einer Textdatei:

      
     public void downloadUrl(String u) throws IOException   {  
      URL url = new URL(u);  
         BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("webseiteninhalt.txt"));  
         InputStream in = url.openConnection().getInputStream();  
         byte[] buffer = new byte[1024];  
         int read;  
         while ((read = in.read(buffer)) != -1) {  
             out.write(buffer, 0, read);  
         }  
         out.close();  
     }  
    
    

    Markus

    --

  4. Vielen Danke an alle die geholfen habe!

    Da ich mit den gewonnen Informationen weiterarbeiten muss, hinterlege ich das Ergebnis in einem String;

    Dadurch ist folgender funktionierender Code entstanden:

      
    try  
       {  
        URL url = new URL(v);  
        BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));  
      
        String ergebnis ="";  
        String tmp;  
      
        while((tmp = br.readLine()) != null)  
        {  
         ergebnis = ergebnis.concat(tmp);  
        }  
      
        br.close();  
      
       }  
       catch(Exception e)  
       {  
        System.out.println(e.getMessage());  
        e.printStackTrace();  
       }  
    
    
    1. Hej,

      Nur ein kurzer Hinweis:

        
      
      >     String ergebnis ="";  
      >     while((tmp = br.readLine()) != null)  
      >     {  
      >      ergebnis = ergebnis.concat(tmp);  
      >     }  
      
      

      Da String immutable ist, kann das so sehr unperformant werden. Für jedes concat() -- also jeden Schleifedurchlauf -- muss die JVM erstmal neuen Speicher für eine CharacterSequence allozieren, dann den alten String hineinkopieren, den anzuhängenden dranhängen, das so erzeugte Objekt in die neue Variable einhängen, und irgendwann den alten Speicherbereich durch den GC aufräumen. Zugegeben, in der Praxis spielt das oft keine Rolle, aber aus Prinzip und auch Komfortgründen würde ich schon zum Gebrauch des [link:http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html@title=StringBuilder]s, oder wenns synchronized sein muss des [link:http://java.sun.com/javase/6/docs/api/java/lang/StringBuffer.html@title=StringBuffer]s raten.

      Siehe auch das Handbuch der Java-Programierung, Kapitel 49.2, Tuning Tips.

      Beste Grüße
      Biesterfeld

      --
      Art.1: Et es wie et es
      Art.2: Et kütt wie et kütt
      Art.3: Et hätt noch immer jot jejange
      Das Kölsche Grundgesetz