1. URL
clasa
Am studiat lucrul cu fluxurile I/O. Am studiat lucrul cu fișierele. Ce ar trebui să studiem în continuare? Ce zici de lucrul cu rețeaua, inclusiv cu internetul? Sună promițător, nu-i așa?
În Java, lucrul cu Internetul nu este mai dificil decât lucrul cu fișiere. Ei bine, poate doar un pic.
Pentru a lucra cu resurse de Internet, Java are o clasă specială — URL
. Este la fel de simplu ca un scaun, după cum veți vedea acum.
Obținerea unei pagini web
Câte linii de cod credeți că trebuie să scrieți pentru a descărca un fișier text de pe Internet și a afișa conținutul acestuia pe ecran? 10? 100? 1000? Sau poate 5?
Cod | Notă |
---|---|
|
Creează un obiect URL cu calea către pagină Obține un InputStream de la obiectul URL Citește toți octeții și returnează o matrice de octeți Convertește matricea într-un șir Afișează șirul |
Conținutul unui fișier HTML va fi afișat pe ecran:
Ieșire de consolă |
---|
|
Comparând lucrul cu File
șiURL
URL
este similar cu File
sau Path
, dar Path
stochează calea către o resursă în sistemul de fișiere și URL
stochează calea către o resursă pe Internet.
Toată magia se întâmplă atunci când obținem un InputStream
obiect datorită unui singur apel la openStream()
metodă. Acesta este un obiect obișnuit și l-am studiat deja în interior și în exterior. Totul devine evident după ce primim obiectul InputStream
. La urma urmei, știm deja cum să obținem date din el.
Aruncă o privire: doar primele două rânduri sunt diferite și doar puțin. Și acum îl puteți vedea - avantajul standardizării și al lucrului cu lanțuri de fluxuri de date:
Lucrul cu Internetul | Lucrul cu un fișier |
---|---|
|
|
2. URLConnection
clasa
Pe lângă pur și simplu citirea datelor de pe Internet, putem și încărca date. Încărcarea datelor este mult mai complicată decât citirea acestora. Veți avea nevoie de încă câteva metode. De exemplu:
Cod | Notă |
---|---|
|
Creați un obiect URL cu calea către pagină Creați o conexiune bidirecțională Obțineți un flux de ieșire Puneți date în el Obțineți un flux de intrare Citiți datele din acesta |
Rețineți că nu mai numim url.openStream()
metoda aici. În schimb, luăm un traseu mai lung:
- Mai întâi stabilim o conexiune bidirecțională stabilă folosind
URLConnection.openConnection()
metoda - Apoi obținem un flux pentru a trimite date folosind
connection.getOutputStream()
metoda și a trimite date către server - Apoi obținem un flux pentru citirea datelor folosind
connection.getInputStream()
metoda și începem să citim datele din acesta.
Managementul resurselor
Strict vorbind, ar trebui să înfășurăm toate fluxurile într-un try-with-resources
bloc pentru o manipulare în siguranță. Și n-ar strica să înfășurați golul InputStream
și OutputStream
în ceva mai convenabil. De exemplu, în PrintStream
și BufferedReader
.
Dacă facem toate acestea, atunci codul nostru va arăta cam așa:
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. Exemple de lucru cu rețeaua
Să descarcăm ceva de pe Internet. Și nu doar descărcați-l, ci salvați-l pe disc.
De exemplu, să scriem un program care salvează pe disc o imagine de pe pagina de pornire Google.
În principiu, nu este nimic complicat aici. În forma sa cea mai simplă, acest cod ar arăta astfel:
Salvarea unui fișier pe disc |
---|
|
Cu ajutorul primelor trei linii, primim un flux de date de la o resursă de Internet - dintr-o imagine.
În a patra linie, creăm numele fișierului în care vom salva imaginea. Numele poate fi orice, dar extensia fișierului trebuie să se potrivească cu extensia imaginii de pe Internet. Acest lucru va permite vizualizatorilor locali de imagini să o deschidă corect.
Și, în sfârșit, ultima linie este una dintre metodele Files
clasei copy
. Clasa Files
are mai multe dintre ele. Această metodă, pe care am folosit-o, ia un flux de octeți ( InputStream
) ca prim parametru și ca al doilea parametru - numele fișierului în care ar trebui să fie scrise datele.
Teoretic, dacă URL
imaginea ar fi scurtă, atunci acest cod ar putea fi chiar scris într-o singură linie:
Copierea datelor dintr-un flux într-un fișier |
---|
|
Desigur, nu trebuie să scrieți așa, dar acest exemplu demonstrează cât de convenabile și puternice sunt fluxurile I/O în Java.
GO TO FULL VERSION