1. URLosztá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 InputStreamURL 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 |
|---|
|
FileA és aURL
URLhasonló a Filevagy -hoz Path, de Patheltárolja egy erőforrás elérési útját a fájlrendszerben, és URLtárolja egy erőforrás elérési útját az interneten.
InputStreamMinden 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 InputStreamtá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. URLConnectionosztá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-resourcesa biztonságos kezelés érdekében. És nem ártana becsomagolni a csupasz InputStreamés OutputStreamvalami 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 copymetódusa. Az Filesosztá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 URLké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.
GO TO FULL VERSION