जावा प्रयास-साथ-संसाधन (उदाहरणों के साथ)

इस ट्यूटोरियल में, हम संसाधनों को स्वचालित रूप से बंद करने की कोशिश-के साथ-साथ संसाधनों के स्टेटमेंट के बारे में जानेंगे।

try-with-resourcesबयान स्वचालित रूप से बयान के अंत में सभी संसाधनों बंद कर देता है। एक संसाधन कार्यक्रम के अंत में बंद होने वाली वस्तु है।

इसका सिंटैक्स है:

 try (resource declaration) ( // use of the resource ) catch (ExceptionType e1) ( // catch block ) 

जैसा कि उपरोक्त वाक्य-विन्यास से देखा जाता है, हम इस try-with-resourcesकथन को घोषित करते हैं ,

  1. tryखण्ड के भीतर संसाधन की घोषणा करना और उसे तत्काल करना ।
  2. संसाधन को बंद करते समय फेंके जाने वाले सभी अपवादों को निर्दिष्ट करना और उन्हें संभालना।

नोट: कोशिश-के साथ संसाधनों का बयान AutoCloseable इंटरफ़ेस को लागू करने वाले सभी संसाधनों को बंद कर देता है।

आइए एक उदाहरण लेते हैं जो try-with-resourcesकथन को लागू करता है।

उदाहरण 1: संसाधनों के साथ प्रयास करें

 import java.io.*; class Main ( public static void main(String() args) ( String line; try(BufferedReader br = new BufferedReader(new FileReader("test.txt"))) ( while ((line = br.readLine()) != null) ( System.out.println("Line =>"+line); ) ) catch (IOException e) ( System.out.println("IOException in try block =>" + e.getMessage()); ) ) ) 

यदि Test.txt फ़ाइल नहीं मिली है तो आउटपुट।

 प्रयास के साथ संसाधनों में IOException ब्लॉक => test.txt (ऐसी कोई फ़ाइल या निर्देशिका नहीं) 

अगर आउटपुट। टेस्ट फ़ाइल पाया जाता है।

 प्रयास-के साथ-साथ संसाधन ब्लॉक लाइन => परीक्षण लाइन दर्ज करना 

इस उदाहरण में, हम test.txtफ़ाइल से डेटा पढ़ने के लिए बफ़रड्रेडर के एक उदाहरण का उपयोग करते हैं।

try-with-resourcesबयान के अंदर बफ़रडर को घोषित करना और उसे तत्काल सुनिश्चित करना यह सुनिश्चित करता है कि उसका tryविवरण सामान्य रूप से पूरा होता है या अपवाद को फेंकता है या नहीं।

यदि कोई अपवाद होता है, तो इसे अपवाद हैंडलिंग ब्लॉक या थ्रो कीवर्ड का उपयोग करके नियंत्रित किया जा सकता है।

दबा हुआ अपवाद

उपरोक्त उदाहरण में, try-with-resourcesजब बयान से अपवादों को फेंका जा सकता है :

  • फ़ाइल test.txtनहीं मिली है।
  • BufferedReaderवस्तु को बंद करना ।

एक अपवाद को tryब्लॉक से भी फेंक दिया जा सकता है क्योंकि किसी भी समय पढ़ा गया फ़ाइल कई कारणों से विफल हो सकता है।

यदि अपवाद को tryब्लॉक और try-with-resourcesस्टेटमेंट दोनों से फेंक दिया जाता है , तो tryब्लॉक से अपवाद को फेंक दिया जाता है और try-with-resourcesस्टेटमेंट से अपवाद को दबा दिया जाता है।

दबे हुए अपवादों को पुनः प्राप्त करना

जावा 7 और बाद में, ब्लॉक Throwable.getSuppressed()द्वारा फेंके गए अपवाद से विधि को कॉल करके दबाए गए अपवादों को पुनर्प्राप्त किया जा सकता है try

यह विधि सभी दमित अपवादों की एक सरणी देती है। हमें catchब्लॉक में दबाए गए अपवाद मिलते हैं ।

 catch(IOException e) ( System.out.println("Thrown exception=>" + e.getMessage()); Throwable() suppressedExceptions = e.getSuppressed(); for (int i=0; i" + suppressedExceptions(i)); ) ) 

कोशिश के साथ संसाधनों का उपयोग करने के लाभ

यहाँ कोशिश के साथ संसाधनों का उपयोग करने के फायदे हैं:

1. अंत में संसाधन को बंद करने की आवश्यकता नहीं है

जावा 7 ने यह सुविधा शुरू करने से पहले, हमें finallyयह सुनिश्चित करने के लिए ब्लॉक का उपयोग करना था कि संसाधन लीक से बचने के लिए संसाधन बंद है।

यहाँ एक प्रोग्राम है जो उदाहरण 1 के समान है । हालांकि, इस कार्यक्रम में, हमने अंत में बंद संसाधनों का उपयोग किया है।

उदाहरण 2: अंत में ब्लॉक का उपयोग करके संसाधन बंद करें

 import java.io.*; class Main ( public static void main(String() args) ( BufferedReader br = null; String line; try ( System.out.println("Entering try block"); br = new BufferedReader(new FileReader("test.txt")); while ((line = br.readLine()) != null) ( System.out.println("Line =>"+line); ) ) catch (IOException e) ( System.out.println("IOException in try block =>" + e.getMessage()); ) finally ( System.out.println("Entering finally block"); try ( if (br != null) ( br.close(); ) ) catch (IOException e) ( System.out.println("IOException in finally block =>"+e.getMessage()); ) ) ) ) 

आउटपुट

 टेस्ट ब्लॉक की कोशिश कर रहा है 

जैसा कि हम उपरोक्त उदाहरण से देख सकते हैं, finallyसंसाधनों को साफ करने के लिए ब्लॉक का उपयोग कोड को अधिक जटिल बनाता है।

साथ ही try… catchप्रखंड में प्रखंडवार सूचना दें finally? ऐसा इसलिए है क्योंकि इस ब्लॉक के अंदर उदाहरण IOExceptionबंद करते समय भी हो सकता है इसलिए इसे भी पकड़ा और संभाला जाता है।BufferedReaderfinally

try-with-resourcesबयान करता है स्वत: संसाधन प्रबंधन । हमें स्पष्ट रूप से संसाधनों को बंद करने की आवश्यकता नहीं है क्योंकि जेवीएम स्वचालित रूप से उन्हें बंद कर देता है। यह कोड को अधिक पठनीय और लिखने में आसान बनाता है।

2. कई संसाधनों के साथ संसाधनों के साथ प्रयास करें

हम try-with-resourcesउन्हें अर्धविराम से अलग करके बयान में एक से अधिक संसाधनों की घोषणा कर सकते हैं;

उदाहरण 3: कई संसाधनों के साथ प्रयास करें

 import java.io.*; import java.util.*; class Main ( public static void main(String() args) throws IOException( try (Scanner scanner = new Scanner(new File("testRead.txt")); PrintWriter writer = new PrintWriter(new File("testWrite.txt"))) ( while (scanner.hasNext()) ( writer.print(scanner.nextLine()); ) ) ) ) 

यदि यह प्रोग्राम बिना किसी अपवाद के उत्पन्न होता है, तो Scannerऑब्जेक्ट testRead.txtफ़ाइल से एक पंक्ति पढ़ता है और इसे एक नई testWrite.txtफ़ाइल में लिखता है ।

जब कई घोषणाएं की जाती हैं, तो try-with-resourcesबयान इन संसाधनों को रिवर्स ऑर्डर में बंद कर देता है। इस उदाहरण में, PrintWriterऑब्जेक्ट पहले बंद है और फिर Scannerऑब्जेक्ट बंद है।

जावा 9 संसाधन-वृद्धि के साथ प्रयास करें

जावा 7 में, try-with-resourcesकथन पर प्रतिबंध है । संसाधन को अपने ब्लॉक के भीतर स्थानीय रूप से घोषित करने की आवश्यकता है।

 try (Scanner scanner = new Scanner(new File("testRead.txt"))) ( // code ) 

यदि हमने जावा 7 में ब्लॉक के बाहर संसाधन की घोषणा की है, तो यह एक त्रुटि संदेश उत्पन्न करेगा।

 Scanner scanner = new Scanner(new File("testRead.txt")); try (scanner) ( // code ) 

इस त्रुटि से निपटने के लिए, जावा 9 ने try-with-resourcesवक्तव्य में सुधार किया ताकि संसाधन के संदर्भ का उपयोग किया जा सके, भले ही इसे स्थानीय रूप से घोषित न किया गया हो। उपरोक्त कोड अब बिना किसी संकलन त्रुटि के निष्पादित होगा।

दिलचस्प लेख...