1. URL
sinifi
Input-output axınları ilə işi öyrənmişik, fayllarla işi öyrənmişik, bəs sonra nəyi öyrənək? Gəlin şəbəkə və internetlə işi öyrənək. Vədedici səslənir, elə deyilmi?
Java-da internetlə işləmək fayllarla işləməkdən çətin deyil. Bəlkə də cüzi fərqlə.
Java-da internet resursları ilə işləmək üçün xüsusi bir sinif var - URL
. O qədər sadədir ki, az qala skamyadır, buna indi özünüz şahid olacaqsınız.
İnternetdən səhifə götürmək
Necə düşünürsünüz, internetdən hansısa mətn faylını yükləmək və onu ekranda göstərmək üçün neçə kod sətri yazmaq lazımdır? 10? 100? 1000? Yoxsa 5?
Kod | Qeydlər |
---|---|
|
URL obyektini səhifənin yoluna uyğun olaraq yaradılır İnternet obyektindən InputStream götürülürBütün baytlar oxunur və bayt massivi qaytarılır Massiv mətnə çevrilir Mətn ekranda göstərilir |
Ekranda HTML-faylın tərkibi göstəriləcək:
Ekranda çıxış |
---|
|
File
və URL
ilə işin müqayisəsi
URL
- File
ya da Path
-in analoqudur, sadəcə Path
fayl sistemində resursa yol göstərir, URL
isə internetdə resursa yol göstərir.
Bütün sehr, yalnız openStream()
metodunun bir çağırışı ilə InputStream
tipli obyekt əldə etdiyimiz zaman baş verir. Bu standart bir obyektə çevrilir və biz artıq bunu başa düşmüşük. InputStream
tipli obyekt alındıqdan sonra hər şey aydın olur. Çünki, məlumatları necə oxuyacağımızı artıq bilirik.
Müqayisə edin: yalnızca ilk iki sətir fərqlənir, o da az. Bu, standartlaşdırmanın və məlumat axınları ilə işləməyin üstünlükləridir:
İnternetlə iş | Fayllarla iş |
---|---|
|
|
2. URLConnection
sinfi
İnternetdən məlumatları oxumaqdan başqa, ora məlumat yükləyə bilərik. Məlumat yükləmə prosesi oxumaqdan qat-qat daha çətindir. Bir neçə əlavə metod istifadə etməli olacaqsınız. Nümunə:
Kod | Qeyd |
---|---|
|
URL obyektini səhifənin yoluna görə yaradırıq İki tərəfli bir bağlantı yaradırıq Çıxış axını alırıq Axına məlumat yazırıq Giriş axını alırıq Axından məlumat oxuyuruq |
Burada artıq url.openStream()
metodunu çağırmadığımıza diqqət yetirin. Bunun əvəzinə daha uzun yola baş vururuq:
- Əvvəlcə
URLConnection openConnection()
metodundan istifadə edərək stabil iki tərəfli bağlantı qururuq - Sonra
connection.getOutputStream()
metodu ilə məlumat göndərmək üçün axını alırıq və onları serverə ötürürük - Sonra
connection.getInputStream()
metodu ilə məlumat oxumaq üçün axını alırıq və oradan oxumağa başlayırıq.
Resursların idarə edilməsi
Düzünü desək, bütün axınları try
-with-resources daxilində istifadə etməliyik ki, bu daha təhlükəsiz olsun. Həmçinin boş InputStream
və OutputStream
-ləri daha rahat bir şeyə bükmək zərər verməzdi. Məsələn, PrintStream
və BufferedReader
.
Bunların hamısını etsək, kodumuz belə bir vəziyyətdə olacaq:
URL url = new URL("https://codegym.com");
URLConnection connection = url.openConnection(); // məlumat göndəririk
try (OutputStream output = connection.getOutputStream();
PrintStream sender = new PrintStream(output))
{
sender.println("Salam");
}
// məlumat oxuyuruq
try(InputStream input = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input)))
{
while (reader.ready())
System.out.println(reader.readLine());
}
3. Şəbəkə ilə iş nümunələri
Bəlkə internetdən nəsə yükləyək? Təkcə yükləməyək, həm də diskin üzərinə saxlayaq.
Məsələn, gəlin elə bir proqram yazaq ki, Google-un əsas səhifəsindən bir şəkli diskin üzərinə saxlasın.
Əslində, bu, çox çətin deyil. Ən sadə interpretasiyada kod bu cür görünəcək:
Faylı diskin üzərinə saxlamaq |
---|
|
İlk üç sətir vasitəsilə internet resursundan — şəkildən məlumat axını alırıq.
Dördüncü sətirdə şəkli saxlamaq üçün fayl adı yaradılır. Ad istənilən ola bilər, amma faylın genişlənməsi internetdəki şəkilin genişlənməsi ilə uyğun olmalıdır. Beləliklə, yerli şəkil baxıcı proqramlar onu düzgün aça biləcək.
Və nəhayət, sonuncu sətir — bu, Files
sinfinin copy metodlarından biridir. Files
sinfinin bir neçə belə metodu var. Bizim istifadə etdiyimiz metod birinci parametr kimi məlumat mənbəyini — byte axını (InputStream
), ikinci parametr kimi isə məlumatın yazılacağı faylın adını qəbul edir.
Nəzəri olaraq, əgər şəkilin URL
-i çox qısa olsaydı, bu kodu ümumiyyətlə bir sətirdə yazmaq olardı:
Axından fayla məlumatın kopiyası |
---|
|
Belə yazmaq, əlbəttə ki, lazım deyil, amma bu nümunə göstərir ki, Java dili ilə giriş-çıxış axınları nə qədər rahat və güclüdür.
GO TO FULL VERSION