1. URL
klasse
We hebben het werken met I/O-streams bestudeerd. We hebben het werken met bestanden bestudeerd. Wat moeten we hierna bestuderen? Hoe zit het met het werken met het netwerk, inclusief internet? Klinkt veelbelovend, niet?
In Java is werken met internet niet moeilijker dan werken met bestanden. Nou ja, misschien maar een klein beetje.
Om met internetbronnen te werken, heeft Java een speciale klasse — URL
. Het is zo simpel als een kruk, zoals je nu zult zien.
Een webpagina krijgen
Hoeveel regels code denkt u te moeten schrijven om een tekstbestand van internet te downloaden en de inhoud ervan op het scherm weer te geven? 10? 100? 1000? Of misschien wel 5?
Code | Opmerking |
---|---|
|
Creëert een URL-object met het pad naar de pagina Haalt een InputStream uit het URL-object Leest alle bytes en retourneert een array van bytes Zet de array om in een string Geef de string weer |
De inhoud van een HTML-bestand wordt op het scherm weergegeven:
Console-uitvoer |
---|
|
Werken vergelijken met File
enURL
URL
is vergelijkbaar met File
of Path
, maar Path
slaat het pad naar een bron op in het bestandssysteem en URL
slaat het pad op naar een bron op internet.
Alle magie gebeurt wanneer we een InputStream
object krijgen dankzij een enkele aanroep van de openStream()
methode. Dit is een gewoon object en we hebben het al van binnen en van buiten bestudeerd. Alles wordt duidelijk nadat we het InputStream
object hebben gekregen. We weten immers al hoe we er gegevens uit kunnen halen.
Kijk maar: alleen de eerste twee regels zijn verschillend, en slechts in geringe mate. En nu zie je het — het voordeel van standaardisatie en werken met ketens van datastromen:
Werken met internet | Werken met een bestand |
---|---|
|
|
2. URLConnection
klasse
Naast het simpelweg uitlezen van gegevens van internet, kunnen we ook gegevens uploaden. Het uploaden van gegevens is veel ingewikkelder dan het lezen ervan. Je hebt nog een paar methoden nodig. Bijvoorbeeld:
Code | Opmerking |
---|---|
|
Maak een URL-object met het pad naar de pagina Maak een tweerichtingsverbinding Haal een uitvoerstroom op Zet er gegevens in Krijg een invoerstroom Lees er gegevens uit |
Merk op dat we de methode hier niet meer aanroepen url.openStream()
. In plaats daarvan nemen we een langere route:
URLConnection.openConnection()
Met de methode brengen we eerst een stabiele tweerichtingsverbinding tot stand- Vervolgens krijgen we een stream om gegevens te verzenden met behulp van de
connection.getOutputStream()
methode en gegevens naar de server te sturen - Vervolgens krijgen we een stroom voor het lezen van gegevens met behulp van de
connection.getInputStream()
methode en beginnen we er gegevens uit te lezen.
Middelenbeheer
Strikt genomen moeten we alle stromen in een try-with-resources
blok wikkelen voor een veilige afhandeling. En het zou geen kwaad om de blote InputStream
en OutputStream
in iets handiger te wikkelen. Bijvoorbeeld in PrintStream
en BufferedReader
.
Als we dat allemaal doen, ziet onze code er ongeveer zo uit:
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. Voorbeelden van werken met het netwerk
Laten we iets van internet downloaden. En niet alleen downloaden, maar opslaan op schijf.
Laten we bijvoorbeeld een programma schrijven dat een afbeelding van de startpagina van Google op schijf opslaat.
In principe is hier niets ingewikkelds. In zijn eenvoudigste vorm ziet deze code er als volgt uit:
Een bestand opslaan op schijf |
---|
|
Met behulp van de eerste drie regels ontvangen we een gegevensstroom van een internetbron - van een afbeelding.
In de vierde regel maken we de naam van het bestand waarin we de afbeelding zullen opslaan. De naam kan van alles zijn, maar de bestandsextensie moet overeenkomen met de extensie van de afbeelding op internet. Dat stelt lokale afbeeldingsviewers in staat om het correct te openen.
En tot slot is de laatste regel een van de methoden Files
van de klasse copy
. De Files
klas heeft er meerdere. Deze methode, die we hebben gebruikt, neemt een bytestroom ( InputStream
) als eerste parameter en als tweede parameter — de naam van het bestand waar de gegevens naartoe moeten worden geschreven.
Theoretisch, als de URL
afbeelding kort zou zijn, zou deze code zelfs in één regel kunnen worden geschreven:
Gegevens kopiëren van een stream naar een bestand |
---|
|
Je hoeft het natuurlijk niet zo te schrijven, maar dit voorbeeld laat zien hoe handig en krachtig I/O-streams zijn in Java.
GO TO FULL VERSION