32.4 Daten mit Hilfe der Klasse URL lesen
Die Klasse URL
wurde bereits in Abschnitt 25.4.1
behandelt. Neben den dort beschriebenen Möglichkeiten besitzt
sie Methoden, um Daten von der Quelle zu lesen, die durch den URL
adressiert wird:
public final InputStream openStream()
throws IOException
public final Object getContent()
throws IOException
public URLConnection openConnection()
throws IOException
|
java.net.URL |
Mit openStream
wird ein InputStream
geliefert, der wie die Methode getInputStream
der Klasse Socket
zum Lesen der Quelldaten verwendet werden kann. getContent
versucht darüber hinaus, die Daten zu interpretieren. Dazu können
Content Handler Factories registriert
werden, die beispielsweise Text-, Image- oder Archivdateien interpretieren
und ein dazu passendes Java-Objekt liefern. Die Methode openConnection
stellt eine Vorstufe von getContent
dar. Sie liefert ein Objekt des Typs URLConnection,
das eine Abstraktion einer protokollspezifischen Verbindung zwischen
einem Java-Programm und einem URL darstellt.
Als einfaches Beispiel wollen wir uns das folgende Programm SaveURL
ansehen. Es wird mit einem URL und einer Datei als Argument aufgerufen.
Mit Hilfe der Klasse URL
stellt das Programm eine Verbindung zur angegebenen URL her und beschafft
durch Aufruf von openStream
einen InputStream.
Mit seiner Hilfe wird die Quelle gelesen und das Ergebnis in die als
zweites Argument angegebene Datei geschrieben:
001 /* SaveURL.java */
002
003 import java.net.*;
004 import java.io.*;
005
006 public class SaveURL
007 {
008 public static void main(String args[])
009 {
010 if (args.length != 2) {
011 System.err.println(
012 "Usage: java SaveURL <url> <file>"
013 );
014 System.exit(1);
015 }
016 try {
017 URL url = new URL(args[0]);
018 OutputStream out = new FileOutputStream(args[1]);
019 InputStream in = url.openStream();
020 int len;
021 byte b[] = new byte[100];
022 while ((len = in.read(b)) != -1) {
023 out.write(b, 0, len);
024 }
025 out.close();
026 in.close();
027 } catch (MalformedURLException e) {
028 System.err.println(e.toString());
029 System.exit(1);
030 } catch (IOException e) {
031 System.err.println(e.toString());
032 System.exit(1);
033 }
034 }
035 }
|
SaveURL.java |
Listing 32.8: Daten von einem URL lesen
Das Programm kann nun leicht verwendet werden, um den Inhalt beliebiger
URLs auf der Festplatte abzuspeichern. Die folgenden beiden Aufrufe
zeigen den Download der Hauptseite des Java-Servers von SUN und das
Laden einer Testseite von unserem in Abschnitt 32.3.3
vorgestellten Web-Server:
java SaveURL http://java.sun.com x.html
java SaveURL http://localhost/index.html y.html