1. URL
osztály
Tanulmányoztuk az I/O adatfolyamokkal való munkát. Tanulmányoztuk a fájlokkal való munkát. Mit tanuljunk ezután? Mi a helyzet a hálózattal, beleértve az internetet is? Ígéretesnek hangzik, nem?
A Java nyelven az internettel való munka nem nehezebb, mint a fájlokkal. Nos, talán csak egy kicsit.
Az internetes erőforrásokkal való munkához a Java speciális osztálya - URL
. Ez olyan egyszerű, mint egy zsámoly, ahogy most látni fogja.
Weboldal beszerzése
Mit gondol, hány sornyi kódot kell megírnia ahhoz, hogy letölthessen valamilyen szöveges fájlt az internetről, és megjelenítse a tartalmát a képernyőn? 10? 100? 1000? Vagy esetleg 5?
Kód | jegyzet |
---|---|
|
Létrehoz egy URL objektumot az oldal elérési útjával Lekér egy InputStream URL objektumot Beolvassa az összes bájtot és egy bájtos tömböt ad vissza A tömb átalakítása stringgé A karakterlánc megjelenítése |
Egy HTML-fájl tartalma megjelenik a képernyőn:
Konzol kimenet |
---|
|
File
A és aURL
URL
hasonló a File
vagy -hoz Path
, de Path
eltárolja egy erőforrás elérési útját a fájlrendszerben, és URL
tárolja egy erőforrás elérési útját az interneten.
InputStream
Minden varázslat megtörténik, amikor a metódus egyetlen meghívásának köszönhetően kapunk egy tárgyat openStream()
. Ez egy közönséges tárgy, és már kívül-belül tanulmányoztuk. Minden nyilvánvalóvá válik, miután megkaptuk a InputStream
tárgyat. Hiszen már tudjuk, hogyan lehet adatot szerezni belőle.
Nézze meg: csak az első két sor különbözik, és csak kissé. És most már láthatja – a szabványosítás és az adatfolyam-láncokkal való munka előnye:
Internetes munka | Fájlokkal végzett munka |
---|---|
|
|
2. URLConnection
osztály
Amellett, hogy egyszerűen leolvassuk az adatokat az internetről, adatokat is feltölthetünk. Az adatok feltöltése sokkal bonyolultabb, mint az olvasás. Szüksége lesz még néhány módszerre. Például:
Kód | jegyzet |
---|---|
|
Hozzon létre egy URL objektumot az oldal elérési útjával Kétirányú kapcsolat létrehozása Kimeneti adatfolyam beszerzése Adatok elhelyezése Bemeneti adatfolyam olvasása belőle |
Jegyezzük meg, hogy itt már nem hívjuk a url.openStream()
módszert. Ehelyett egy hosszabb utat választunk:
URLConnection.openConnection()
A módszerrel először stabil kétirányú kapcsolatot hozunk létre- Ezután egy adatfolyamot kapunk, amely a metódussal adatokat küld
connection.getOutputStream()
, és adatokat küld a szervernek - Ezután a metódussal kapunk egy adatfolyamot az adatok olvasásához
connection.getInputStream()
, és abból kezdjük el az adatolvasást.
Erőforrás menedzsment
Szigorúan véve minden folyamot egy blokkba kell csomagolnunk try-with-resources
a biztonságos kezelés érdekében. És nem ártana becsomagolni a csupasz InputStream
és OutputStream
valami kényelmesebb dologba. Például a PrintStream
és BufferedReader
.
Ha mindezt megtesszük, akkor a kódunk valahogy így fog kinézni:
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. Példák a hálózattal való munkára
Töltsünk le valamit az internetről. És ne csak töltse le, hanem mentse lemezre.
Például írjunk egy programot, amely a Google kezdőlapjáról egy képet lemezre ment.
Elvileg nincs itt semmi bonyolult. A legegyszerűbb formában ez a kód így nézne ki:
Fájl mentése lemezre |
---|
|
Az első három sor segítségével adatfolyamot kapunk egy internetes forrásból — képből.
A negyedik sorban létrehozzuk annak a fájlnak a nevét, amelybe a képet menteni fogjuk. A név bármi lehet, de a fájl kiterjesztésének meg kell egyeznie az interneten található kép kiterjesztésével. Ez lehetővé teszi a helyi képnézők számára, hogy megfelelően nyissa meg.
Files
És végül, az utolsó sor az osztály egyik copy
metódusa. Az Files
osztályban több is van. Ez az általunk használt módszer egy bájtfolyamot ( InputStream
) vesz első paraméterként, második paraméterként pedig annak a fájlnak a nevét, ahová az adatokat írjuk.
Elméletileg, ha a URL
kép rövid lenne, akkor ez a kód akár egyetlen sorba is írható:
Adatok másolása adatfolyamból fájlba |
---|
|
Természetesen nem kell így írni, de ez a példa bemutatja, milyen kényelmes és hatékony az I/O adatfolyamok Java-ban.