1. URL
klass
Vi har studerat att arbeta med I/O-strömmar. Vi har studerat att arbeta med filer. Vad ska vi studera hÀrnÀst? Hur Àr det med att arbeta med nÀtverket, inklusive internet? LÄter lovande, eller hur?
I Java Àr det inte svÄrare att arbeta med Internet Àn att arbeta med filer. Tja, kanske bara lite.
För att arbeta med Internetresurser har Java en speciell klass â URL
. Det Àr sÄ enkelt som en pall, som du nu kommer att se.
Skaffa en webbsida
Hur mÄnga rader kod tror du att du behöver skriva för att ladda ner en textfil frÄn Internet och visa dess innehÄll pÄ skÀrmen? 10? 100? 1000? Eller kanske 5?
Koda | Notera |
---|---|
|
Skapar ett URL-objekt med sökvÀgen till sidan FÄr ett InputStream frÄn URL-objektet LÀser alla byte och returnerar en array med byte Konvertera arrayen till en strÀng Visa strÀngen |
InnehÄllet i en HTML-fil kommer att visas pÄ skÀrmen:
KonsolutgÄng |
---|
|
JÀmföra arbete med File
ochURL
URL
liknar File
eller Path
, men Path
lagrar sökvÀgen till en resurs i filsystemet och URL
lagrar sökvÀgen till en resurs pÄ Internet.
All magi hÀnder nÀr vi fÄr ett InputStream
objekt tack vare ett enda anrop till openStream()
metoden. Detta Àr ett vanligt föremÄl, och vi har redan studerat det inifrÄn och ut. Allt blir uppenbart efter att vi fÄtt InputStream
föremÄlet. NÀr allt kommer omkring vet vi redan hur man fÄr data frÄn det.
Ta en titt: bara de tvÄ första raderna Àr olika, och bara lite. Och nu kan du se det - fördelen med standardisering och att arbeta med kedjor av dataströmmar:
Arbeta med Internet | Arbeta med en fil |
---|---|
|
|
2. URLConnection
klass
Förutom att helt enkelt lÀsa data frÄn Internet kan vi Àven ladda upp data. Att ladda upp data Àr mycket mer komplicerat Àn att lÀsa det. Du kommer att behöva nÄgra fler metoder. Till exempel:
Koda | Notera |
---|---|
|
Skapa ett URL-objekt med sökvÀgen till sidan Skapa en tvÄvÀgsförbindelse FÄ en utdataström LÀgg data i den FÄ en indataström LÀs data frÄn den |
Observera att vi inte lÀngre kallar url.openStream()
metoden hÀr. IstÀllet tar vi en lÀngre vÀg:
- Vi upprÀttar först en stabil tvÄvÀgsförbindelse med
URLConnection.openConnection()
metoden - Sedan fÄr vi en stream för att skicka data med
connection.getOutputStream()
metoden och skicka data till servern - Sedan fÄr vi en ström för att lÀsa data med
connection.getInputStream()
metoden och börjar lÀsa data frÄn den.
Resurshantering
StrÀngt taget bör vi slÄ in alla bÀckar i ett try-with-resources
block för sÀker hantering. Och det skulle inte skada att svepa in det nakna InputStream
och OutputStream
i nÄgot mer bekvÀmt. Till exempel i PrintStream
och BufferedReader
.
Om vi ââgör allt det kommer vĂ„r kod att se ut ungefĂ€r sĂ„ hĂ€r:
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. Exempel pÄ att arbeta med nÀtverket
LÄt oss ladda ner nÄgot frÄn Internet. Och inte bara ladda ner det, utan spara det pÄ disk.
LÄt oss till exempel skriva ett program som sparar en bild frÄn Googles hemsida till disk.
I princip Àr det inget komplicerat hÀr. I sin enklaste form skulle den hÀr koden se ut sÄ hÀr:
Sparar en fil pÄ disk |
---|
|
Med hjĂ€lp av de tre första raderna fĂ„r vi en dataström frĂ„n en internetresurs â frĂ„n en bild.
PÄ den fjÀrde raden skapar vi namnet pÄ filen som vi ska spara bilden till. Namnet kan vara vad som helst, men filtillÀgget mÄste matcha förlÀngningen av bilden pÄ Internet. Det gör att lokala bildvisare kan öppna den korrekt.
Och slutligen, den sista raden Àr en av Files
klassens copy
metoder. Klassen Files
har flera av dem. Denna metod, som vi anvÀnde, tar en byteström ( InputStream
) som sin första parameter, och som den andra parametern - namnet pÄ filen dÀr data ska skrivas.
Teoretiskt, om URL
bildens bild var kort, skulle den hÀr koden till och med kunna skrivas pÄ en enda rad:
Kopiera data frÄn en ström till en fil |
---|
|
Naturligtvis behöver du inte skriva det sÄ hÀr, men det hÀr exemplet visar hur bekvÀma och kraftfulla I/O-strömmar Àr i Java.
GO TO FULL VERSION