1. URLवर्ग
हमने I/O स्ट्रीम के साथ काम करना सीखा है। हमने फाइलों के साथ काम करना सीखा है। हमें आगे क्या पढ़ना चाहिए? इंटरनेट सहित नेटवर्क के साथ काम करने के बारे में क्या? आशाजनक लगता है, है ना?
जावा में, इंटरनेट के साथ काम करना फाइलों के साथ काम करने से ज्यादा मुश्किल नहीं है। ठीक है, शायद थोड़ा सा।
इंटरनेट संसाधनों के साथ काम करने के लिए, जावा में एक विशेष वर्ग है — URL. यह स्टूल की तरह सरल है, जैसा कि अब आप देखेंगे।
एक वेब पेज प्राप्त करना
आपको क्या लगता है कि इंटरनेट से कुछ टेक्स्ट फ़ाइल डाउनलोड करने और उसकी सामग्री को स्क्रीन पर प्रदर्शित करने के लिए आपको कोड की कितनी पंक्तियों को लिखने की आवश्यकता है? 10? 100? 1000? या शायद 5?
| कोड | टिप्पणी |
|---|---|
|
पृष्ठ के पथ के साथ एक URL ऑब्जेक्ट बनाता है URL ऑब्जेक्ट से प्राप्त करता है सभी बाइट्स पढ़ता है और बाइट्स की एक सरणी देता है सरणी को एक स्ट्रिंग में बदलें स्ट्रिंग प्रदर्शित करें InputStream |
HTML फ़ाइल की सामग्री स्क्रीन पर प्रदर्शित होगी:
| कंसोल आउटपुट |
|---|
|
Fileके साथ काम करने की तुलना करनाURL
URLFileया के समान है Path, लेकिन Pathफ़ाइल सिस्टम में संसाधन के पथ को संग्रहीत करता है, और URLइंटरनेट पर संसाधन के पथ को संग्रहीत करता है।
सभी जादू तब होता है जब हम विधि InputStreamके लिए एक कॉल के लिए एक वस्तु धन्यवाद प्राप्त करते हैं। openStream()यह एक साधारण वस्तु है, और हम पहले ही इसका अंदर और बाहर अध्ययन कर चुके हैं। वस्तु मिलने के बाद सब कुछ स्पष्ट हो जाता है InputStream। आखिरकार, हम पहले से ही जानते हैं कि इससे डेटा कैसे प्राप्त किया जाए।
एक नज़र डालें: केवल पहली दो पंक्तियाँ भिन्न हैं, और केवल थोड़ी सी। और अब आप इसे देख सकते हैं - मानकीकरण का लाभ और डेटा स्ट्रीम की श्रृंखलाओं के साथ काम करना:
| इंटरनेट के साथ काम करना | एक फाइल के साथ काम करना |
|---|---|
|
|
2. URLConnectionवर्ग
इंटरनेट से केवल डेटा पढ़ने के अलावा, हम डेटा अपलोड भी कर सकते हैं। डेटा अपलोड करना इसे पढ़ने से कहीं अधिक जटिल है। आपको कुछ और तरीकों की आवश्यकता होगी। उदाहरण के लिए:
| कोड | टिप्पणी |
|---|---|
|
पृष्ठ के पथ के साथ एक URL ऑब्जेक्ट बनाएँ एक दो-तरफ़ा कनेक्शन बनाएँ एक आउटपुट स्ट्रीम प्राप्त करें इसमें डेटा डालें एक इनपुट स्ट्रीम प्राप्त करें इससे डेटा पढ़ें |
ध्यान दें कि अब हम url.openStream()यहां विधि नहीं कहते हैं। इसके बजाय, हम एक लंबा रास्ता अपनाते हैं:
URLConnection.openConnection()हम पहले विधि का उपयोग करके एक स्थिर दो-तरफ़ा कनेक्शन स्थापित करते हैं- फिर हमें विधि का उपयोग करके डेटा भेजने
connection.getOutputStream()और सर्वर को डेटा भेजने के लिए एक स्ट्रीम मिलती है - फिर हम विधि का उपयोग करके डेटा पढ़ने के लिए एक धारा प्राप्त करते हैं
connection.getInputStream()और उससे डेटा पढ़ना शुरू करते हैं।
संसाधन प्रबंधन
कड़ाई से बोलना, हमें try-with-resourcesसुरक्षित संचालन के लिए सभी धाराओं को एक ब्लॉक में लपेट देना चाहिए। और नंगे InputStreamऔर OutputStreamकुछ और सुविधाजनक में लपेटने में कोई दिक्कत नहीं होगी। उदाहरण के लिए, में PrintStreamऔर BufferedReader।
यदि हम वह सब करते हैं, तो हमारा कोड कुछ इस प्रकार दिखाई देगा:
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. नेटवर्क के साथ काम करने के उदाहरण
आइए इंटरनेट से कुछ डाउनलोड करें। और न केवल इसे डाउनलोड करें, बल्कि इसे डिस्क पर सेव करें।
उदाहरण के लिए, चलिए एक प्रोग्राम लिखते हैं जो गूगल होमपेज से डिस्क में इमेज सेव करता है।
सिद्धांत रूप में, यहाँ कुछ भी जटिल नहीं है। अपने सरलतम रूप में, यह कोड इस तरह दिखेगा:
| फ़ाइल को डिस्क पर सहेजना |
|---|
|
पहली तीन पंक्तियों की मदद से, हम एक इंटरनेट संसाधन से एक डेटा स्ट्रीम प्राप्त करते हैं - एक चित्र से।
चौथी पंक्ति में, हम उस फ़ाइल का नाम बनाते हैं जिसमें हम छवि को सहेजेंगे। नाम कुछ भी हो सकता है, लेकिन फ़ाइल एक्सटेंशन को इंटरनेट पर चित्र के विस्तार से मेल खाना चाहिए। इससे स्थानीय छवि दर्शक इसे सही तरीके से खोल सकेंगे।
और अंत में, अंतिम पंक्ति Filesक्लास के copyतरीकों में से एक है। कक्षा Filesमें उनमें से कई हैं। यह विधि, जिसका हमने उपयोग किया है, एक बाइट स्ट्रीम ( InputStream) को इसके पहले पैरामीटर के रूप में लेती है, और दूसरे पैरामीटर के रूप में - फ़ाइल का नाम जहां डेटा लिखा जाना चाहिए।
सैद्धांतिक रूप से, यदि URLछवि छोटी होती, तो यह कोड एक पंक्ति में भी लिखा जा सकता था:
| डेटा को स्ट्रीम से फ़ाइल में कॉपी करना |
|---|
|
बेशक, आपको इसे इस तरह लिखने की ज़रूरत नहीं है , लेकिन यह उदाहरण दर्शाता है कि जावा में I/O स्ट्रीम कितनी सुविधाजनक और शक्तिशाली हैं।
GO TO FULL VERSION