मुख्य सामग्री पर जाएं
मॉड्यूल 5 · पाठ 2 का 2पाठ्यक्रम में 10/14~12 min
मॉड्यूल पाठ (2/2)

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

जावा के पुराने संस्करणों में, उन संसाधनों को प्रबंधित करने के लिए जिन्हें स्पष्ट रूप से बंद करने की आवश्यकता होती है (जैसे फ़ाइलें, डेटाबेस कनेक्शन, या नेटवर्क स्ट्रीम) को यह सुनिश्चित करने के लिए एक अनिवार्य finally ब्लॉक की आवश्यकता होती है। इससे वर्बोज़ और लीक-प्रवण कोड उत्पन्न हुआ।

जावा 7 ने संसाधनों के साथ प्रयास करें कथन पेश किया, जो try ब्लॉक के भीतर घोषित सभी संसाधनों के स्वचालित बंद होने की गारंटी देता है, बशर्ते वे AutoCloseable इंटरफ़ेस लागू करें।

सिंटेक्स

संसाधन try कीवर्ड के तुरंत बाद कोष्ठक के अंदर घोषित और आरंभ किए जाते हैं।

Java
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
    String line = br.readLine();
    System.out.println(line);
} catch (IOException e) {
    System.out.println("I/O Error: " + e.getMessage());
}
// br is closed automatically here, even if an exception occurs

एकाधिक संसाधनों की घोषणा

आप एक ही try ब्लॉक के अंदर कई संसाधनों को अर्धविराम ; से अलग करके इंस्टेंटियेट कर सकते हैं। संसाधनों को उनकी घोषणा के विपरीत क्रम में बंद किया जाएगा।

Java
try (
    FileReader fr = new FileReader("input.txt");
    FileWriter fw = new FileWriter("output.txt")
) {
    // Use resources
} catch (IOException e) {
    System.out.println("Error: " + e.getMessage());
}

कस्टम संसाधन बनाना

एक कस्टम संसाधन का उपयोग try-with-resources ब्लॉक में तब तक किया जा सकता है जब तक यह java.lang.AutoCloseable लागू करता है और close() विधि को ओवरराइड करता है।

Java
public class DatabaseConnection implements AutoCloseable {
    public void query(String sql) {
        System.out.println("Running query: " + sql);
    }

    @Override
    public void close() {
        System.out.println("Connection closed!");
    }
}

खुद कोशिश करना

व्यायाम#java.m5.l2.e1
प्रयास: 0लोड हो रहा है...

पथ पर फ़ाइल रीडर को लपेटते हुए बफ़रेड रीडर को प्रारंभ करने के लिए प्रयास-के-संसाधन कथन का उपयोग करके रीडफ़ाइल विधि को पूरा करें। कैच ब्लॉक में, IOException को इंटरसेप्ट करें और 'एरर रीडिंग फाइल' प्रिंट करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

`कोशिश` के ठीक बाद कोष्ठक में `बफ़रेड रीडर` घोषित करें, और `IOException` हैंडलिंग लागू करें।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#java.m5.l2.e2
प्रयास: 0लोड हो रहा है...

कस्टम संसाधन CustomResource को ट्राइ-विथ-रिसोर्स ब्लॉक के अंदर इंस्टेंट करें, उस पर doWork() विधि लागू करें, और 'त्रुटि' प्रिंट करके अपवाद को संभालें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

`try (CustomResource res = new CustomResource())` का उपयोग करें और इसके अंदर `res.doWork();` को कॉल करें।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#java.m5.l2.e3
प्रयास: 0लोड हो रहा है...

फर्स्ट रिसोर्स और सेकंड रिसोर्स दोनों को एक ही प्रयास-के-संसाधन निर्माण में घोषित करें। 'त्रुटि' प्रिंट करके अपवाद को संभालें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

अर्धविराम `;` का उपयोग करके `कोशिश` के कोष्ठक के अंदर दो संसाधनों की घोषणा को अलग करें।

3 प्रयासों के बाद समाधान उपलब्ध है