title: Closing Java InputStreams
body: <p>I have some questions about the usage of the close() method when using Java InputStreams.  From what I see and read from most developers, you should always explicitly call close() on an InputStream when it is no longer needed.  But, today I was looking into using a Java properties file, and every example I have found has something like this:</p>
  
  <pre><code>Properties props = new Properties();
  try {
      props.load(new FileInputStream("message.properties"));
      //omitted.
  } catch (Exception ex) {}
  </code></pre>
  
  <p>With the above example, there is no way to explicitly call close() because the InputStream is unreachable after it is used.  I have seen many similar uses of InputStreams even though it seems to contradict what most people say about explicitly closing.  I read through Oracle's JavaDocs and it does not mention if the Properties.load() method closes the InputStream.  I am wondering if this is generally acceptable or if it is preferred to do something more like the following:</p>
  
  <pre><code>Properties props = new Properties();
  InputStream fis = new FileInputStream("message.properties");
  try {
      props.load(fis);
      //omitted.
  } catch (Exception ex) {
      //omitted.
  } finally {
      try {
          fis.close();
      } catch (IOException ioex) {
          //omitted.
      }
  }
  </code></pre>
  
  <p>Which way is better and/or more efficient?  Or does it really matter?</p>