Internetseite einlesen und wieder ausgeben
turgar
- java
0 Alexander (HH)0 Slyh0 *Markus0 turgar
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!
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
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
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
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();
}
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