2012-07-11 10 views
7

पढ़ते समय मैं कोड निम्नलिखित है:कैसे fileInputStream बंद करने के लिए संपत्ति फ़ाइल

// Read properties file. 
    Properties properties = new Properties(); 
    try { 
    properties.load(new FileInputStream("filename.properties")); 
    } catch (FileNotFoundException e) { 
    system.out.println("FileNotFound"); 
    }catch (IOException e) { 
    system.out.println("IOEXCeption"); 
    } 

यह FileInputStream बंद करने के लिए आवश्यक है? यदि हां, तो मैं यह कैसे कर सकता हूं? मुझे अपने कोड चेकलिस्ट में एक खराब अभ्यास त्रुटि मिल रही है। आखिरकार ब्लॉक करने के लिए कहा।

उत्तर

8

आपको FileInputStream को बंद करना होगा, क्योंकि Properties उदाहरण नहीं होगा। Properties.load() से जावाडोक:

निर्दिष्ट विधि इस विधि के बाद खुला रहता है।

स्टोर FileInputStream एक अलग चर में, try के बाहर घोषणा की और एक finally ब्लॉक कि FileInputStream बंद कर देता है जोड़ने अगर इसे खोला गया था:

Properties properties = new Properties(); 
FileInputStream fis = null; 
try { 
    fis = new FileInputStream("filename.properties"); 
    properties.load(fis); 
} catch (FileNotFoundException e) { 
    system.out.println("FileNotFound"); 
} catch (IOException e) { 
    system.out.println("IOEXCeption"); 
} finally { 
    if (null != fis) 
    { 
     try 
     { 
      fis.close(); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

उपयोग try-with-resources जावा 7 के बाद से:

final Properties properties = new Properties(); 
try (final FileInputStream fis = 
     new FileInputStream("filename.properties")) 
{ 
    properties.load(fis); 
} catch (FileNotFoundException e) { 
    system.out.println("FileNotFound"); 
} catch (IOException e) { 
    system.out.println("IOEXCeption"); 
} 
2

आपको हमेशा चलना चाहिए आपकी धाराओं को बंद कर दें, और इसे finally ब्लॉक में करना एक अच्छा अभ्यास है। इसका कारण यह है कि finally ब्लॉक हमेशा निष्पादित हो जाता है, और आप यह सुनिश्चित करना चाहते हैं कि धारा हमेशा बंद हो, भले ही कुछ बुरा होता है।

FileInputStream inStream = null; 
    try { 
     inStream = new FileInputStream("filename.properties"); 
     properties.load(inStream); 
    } catch (FileNotFoundException e) { 
     System.out.println("FileNotFound"); 
    } catch (IOException e) { 
     System.out.println("IOEXCeption"); 
    } finally { 
     try { 
      inStream.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

आप जावा 7 का उपयोग कर रहे हैं, तो यह बहुत आसान हो जाता है, के बाद से एक नया try-with वाक्य रचना शुरू की गई थी। फिर आप इस तरह लिख सकते हैं:

try(FileInputStream inStream = new FileInputStream("filename.properties")){ 
     properties.load(inStream); 
    } catch (FileNotFoundException e) { 
     System.out.println("FileNotFound"); 
    } catch (IOException e) { 
     System.out.println("IOEXCeption"); 
} 

और स्ट्रीम स्वचालित रूप से बंद हो जाती है।

public class PropertiesHelper { 
    public static Properties loadFromFile(String file) throws IOException { 
     Properties properties = new Properties(); 
     FileInputStream stream = new FileInputStream(file); 
     try { 
      properties.load(stream); 
     } finally { 
      stream.close(); 
     } 
     return properties; 
    } 
} 
1

यहाँ एक उदाहरण है। http://projectlombok.org/features/Cleanup.html

Properties properties = new Properties(); 
try { 
    @Cleanup FileInputStream myFis = new FileInputStream("filename.properties"); 
    properties.load(myFis); 
} catch (FileNotFoundException e) { 
    System.out.println("FileNotFound"); 
}catch (IOException e) { 
    System.out.println("IOEXCeption"); 
} 

या, तभी करें जब आपके जावा 7 का उपयोग कर रहे हैं, वहाँ है नई सुविधा "संसाधन के साथ प्रयास करें।" http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

Properties properties = new Properties(); 
try (FileInputStream myFis = new FileInputStream("filename.properties")) { 
    properties.load(myFis); 
} catch (FileNotFoundException e) { 
    System.out.println("FileNotFound"); 
}catch (IOException e) { 
    System.out.println("IOEXCeption"); 
} 
+0

"गुण गुण = नया" - गलत। – duffymo

1

आप बस यह करने के लिए लंबोक @Cleanup उपयोग कर सकते हैं:

संबंधित मुद्दे