do I need to surround fileInputStream.close with a try/catch/finally block? How is it done?

后端 未结 3 466
失恋的感觉
失恋的感觉 2021-01-05 06:16

I have the following Java Class that does one thing, fires out values from config.properties.

When it comes time to close the fileInputStream

相关标签:
3条回答
  • 2021-01-05 06:52

    Because FileInputStream.close() throws an IOException, and the finally{} block doesn't catch exceptions. So you need to either catch it or declare it in order to compile. Eclipse's suggestion is fine; catch the IOException inside the finally{} block.

    0 讨论(0)
  • 2021-01-05 06:53

    Yes, that is the common pre-Java 7 solution. However, with the introduction of Java 7, there are now try-with-resource statements which will automatically close any declared resources when the try block exits:

    try (FileInputStream fileIn = ...) {
        // do something
    } // fileIn is closed
    catch (IOException e) {
        //handle exception
    }
    
    0 讨论(0)
  • 2021-01-05 07:03

    The standard approach is:

    FileInputStream fileInputStream = null;
    try {
        fileInputStream = new FileInputStream(...);
        // do something with the inputstream
    } catch (IOException e) {
        // handle an exception
    } finally { //  finally blocks are guaranteed to be executed
        // close() can throw an IOException too, so we got to wrap that too
        try {
            if (fileInputStream != null) {
                fileInputStream.close();
            }        
        } catch (IOException e) {
            // handle an exception, or often we just ignore it
        }
    }
    
    0 讨论(0)
提交回复
热议问题