1. URL
Klasse
Wir haben die Arbeit mit I/O-Streams untersucht. Wir haben den Umgang mit Dateien studiert. Was sollen wir als nächstes studieren? Wie sieht es mit der Arbeit mit dem Netzwerk, einschließlich dem Internet, aus? Klingt vielversprechend, nicht wahr?
In Java ist die Arbeit mit dem Internet nicht schwieriger als die Arbeit mit Dateien. Na ja, vielleicht nur ein bisschen.
Um mit Internetressourcen zu arbeiten, verfügt Java über eine spezielle Klasse – URL
. Es ist so einfach wie ein Hocker, wie Sie jetzt sehen werden.
Eine Webseite bekommen
Wie viele Zeilen Code müssen Sie Ihrer Meinung nach schreiben, um eine Textdatei aus dem Internet herunterzuladen und deren Inhalt auf dem Bildschirm anzuzeigen? 10? 100? 1000? Oder vielleicht 5?
Code | Notiz |
---|---|
|
Erstellt ein URL-Objekt mit dem Pfad zur Seite. Ruft ein InputStream URL-Objekt ab. Liest alle Bytes und gibt ein Byte-Array zurück. Konvertiert das Array in eine Zeichenfolge . Zeigt die Zeichenfolge an |
Der Inhalt einer HTML-Datei wird auf dem Bildschirm angezeigt:
Konsolenausgabe |
---|
|
Vergleich der Arbeit mit File
undURL
URL
ähnelt File
or Path
, speichert jedoch Path
den Pfad zu einer Ressource im Dateisystem und URL
speichert den Pfad zu einer Ressource im Internet.
InputStream
Die ganze Magie geschieht, wenn wir dank eines einzigen Aufrufs der Methode ein Objekt erhalten openStream()
. Dies ist ein gewöhnliches Objekt, und wir haben es bereits von innen und außen untersucht. Alles wird offensichtlich, nachdem wir das InputStream
Objekt erhalten haben. Schließlich wissen wir bereits, wie wir daraus Daten gewinnen.
Schauen Sie mal: Nur die ersten beiden Zeilen unterscheiden sich, und zwar nur geringfügig. Und jetzt können Sie es sehen – den Vorteil der Standardisierung und der Arbeit mit Ketten von Datenströmen:
Arbeiten mit dem Internet | Arbeiten mit einer Datei |
---|---|
|
|
2. URLConnection
Klasse
Neben dem einfachen Auslesen von Daten aus dem Internet können wir auch Daten hochladen. Das Hochladen von Daten ist viel komplizierter als das Lesen. Sie werden noch ein paar weitere Methoden benötigen. Zum Beispiel:
Code | Notiz |
---|---|
|
Erstellen Sie ein URL-Objekt mit dem Pfad zur Seite. Erstellen Sie eine bidirektionale Verbindung. Erhalten Sie einen Ausgabestream. Fügen Sie Daten darin ein. Erhalten Sie einen Eingabestream. Lesen Sie Daten daraus |
Beachten Sie, dass wir die Methode hier nicht mehr aufrufen url.openStream()
. Stattdessen gehen wir einen längeren Weg:
URLConnection.openConnection()
Mit dieser Methode stellen wir zunächst eine stabile Zwei-Wege-Verbindung her- Dann erhalten wir einen Stream, um Daten mithilfe der
connection.getOutputStream()
Methode zu senden und Daten an den Server zu senden - Dann erhalten wir einen Stream zum Lesen von Daten mithilfe der
connection.getInputStream()
Methode und beginnen mit dem Lesen von Daten daraus.
Resourcenmanagement
Streng genommen sollten wir alle Streams try-with-resources
zur sicheren Handhabung in einen Block einschließen. InputStream
Und es würde nicht schaden, das Nackte OutputStream
in etwas Bequemeres einzuwickeln . Zum Beispiel in PrintStream
und BufferedReader
.
Wenn wir das alles tun, sieht unser Code etwa so aus:
URL url = new URL("https://codegym.cc");
URLConnection connection = url.openConnection();
// Send data
try (OutputStream output = connection.getOutputStream();
PrintStream sender = new PrintStream(output))
{
sender.println("Hello");
}
// Read data
try(InputStream input = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input)))
{
while (reader.ready())
System.out.println(reader.readLine());
}
3. Beispiele für die Arbeit mit dem Netzwerk
Lasst uns etwas aus dem Internet herunterladen. Und laden Sie es nicht einfach herunter, sondern speichern Sie es auf der Festplatte.
Schreiben wir beispielsweise ein Programm, das ein Bild von der Google-Startseite auf der Festplatte speichert.
Im Prinzip gibt es hier nichts Kompliziertes. In seiner einfachsten Form würde dieser Code so aussehen:
Eine Datei auf der Festplatte speichern |
---|
|
Mit Hilfe der ersten drei Zeilen erhalten wir einen Datenstrom von einer Internetressource – von einem Bild.
In der vierten Zeile erstellen wir den Namen der Datei, in der wir das Bild speichern. Der Name kann beliebig sein, die Dateierweiterung muss jedoch mit der Erweiterung des Bildes im Internet übereinstimmen. Dadurch können lokale Bildbetrachter es korrekt öffnen.
Und schließlich ist die letzte Zeile eine der Methoden Files
der Klasse copy
. Die Files
Klasse hat mehrere davon. InputStream
Diese von uns verwendete Methode verwendet als ersten Parameter einen Bytestream ( ) und als zweiten Parameter den Namen der Datei, in die die Daten geschrieben werden sollen.
Wenn das URL
Bild kurz wäre, könnte dieser Code theoretisch sogar in einer einzigen Zeile geschrieben werden:
Kopieren von Daten aus einem Stream in eine Datei |
---|
|
Natürlich müssen Sie es nicht so schreiben, aber dieses Beispiel zeigt, wie praktisch und leistungsfähig I/O-Streams in Java sind.
GO TO FULL VERSION