title: Sonar is showing Bad Practice Method may fail to close stream on exception
body: <blockquote>
    <p><strong>Possible Duplicate:</strong><br>
    <a href="https://stackoverflow.com/questions/12370427/sonar-violation-method-may-fail-to-close-stream-on-exception">Sonar violation: “Method may fail to close stream on exception”</a>  </p>
  </blockquote>
  
  
  
  <p>I have a method that uses DataInputStream , code below :</p>
  
  <pre><code>DataInputStream in = null;
      ServletOutputStream outStream = null;
      FileInputStream fileIn = null;
      URL searchDirectory;
      try {
        searchDirectory = (java.net.URL) ctx.lookup("file/testHarnessDirectory");
  
        File file = new File(searchDirectory.getPath(), filename);
        int length = 0;
        outStream = response.getOutputStream();
        response.setContentType("application/octet-stream");
        response.setContentLength((int) file.length());
  
        response.setHeader("Content-Disposition", "attachement; filename=\"" + filename + "\"");
        byte[] byteBuffer = new byte[4096];
        fileIn = new FileInputStream(file);
        in = new DataInputStream(fileIn);
  
        while ((in != null) &amp;&amp; ((length = in.read(byteBuffer)) != -1)) {
          outStream.write(byteBuffer, 0, length);
        }
        outStream.close();
        fileIn.close();
        in.close();
      }
      catch (NamingException e) {
        LOG.error("Exception", e);
        throw new CPSException(ErrorCode.FILE_HANDLING_EXCEPTION, "Could not download File", e);
      }
      catch (IOException e) {
        LOG.error("Exception", e);
        throw new CPSException(ErrorCode.FILE_HANDLING_EXCEPTION, "Could not submit File", e);
      }
      finally {
        try {
          if (fileIn != null) {
            fileIn.close();
          }
          if (in != null) {
            in.close();
          }
          if (outStream != null) {
            outStream.close();
          }
        }
        catch (IOException e) {
          LOG.error("Exception", e);
          throw new CPSException(ErrorCode.FILE_HANDLING_EXCEPTION, "Could not submit File", e);}}   
  </code></pre>
  
  <p>But Sonar is giving me :  Bad practice - Method may fail to close stream on exception .
  I have looked up this post:<a href="https://stackoverflow.com/questions/12370427/sonar-violation-method-may-fail-to-close-stream-on-exception?answertab=oldest#tab-top">Sonar violation: &quot;Method may fail to close stream on exception&quot;</a>, but seemed incomplete to me. I could be wrong. Could anyone let me know, what is the simple way of closing the streams?</p>