Java 7 introduced the try-with-resources statement, which guarantees that the resource in question will be closed. Since the new syntax is closer to bullet-proof, it should be preferred over the older ``++try++``/``++catch++``/``++finally++`` version.


This rule checks that ``++close++``-able resources are opened in a try-with-resources statement.


*Note* that this rule is automatically disabled when the project's ``++sonar.java.source++`` is lower than ``++7++``.


== Noncompliant Code Example

----
FileReader fr = null;
BufferedReader br = null;
try {
  fr = new FileReader(fileName);
  br = new BufferedReader(fr);
  return br.readLine();
} catch (...) {
} finally {
  if (br != null) {
    try {
      br.close();
    } catch(IOException e){...}
  }
  if (fr != null ) {
    try {
      br.close();
    } catch(IOException e){...}
  }
}
----


== Compliant Solution

----
try (
    FileReader fr = new FileReader(fileName);
    BufferedReader br = new BufferedReader(fr)
  ) {
  return br.readLine();
}
catch (...) {}
----
or

----
try (BufferedReader br = 
        new BufferedReader(new FileReader(fileName))) { // no need to name intermediate resources if you don't want to
  return br.readLine();
}
catch (...) {}
----


== See

* https://wiki.sei.cmu.edu/confluence/x/6DZGBQ[CERT, ERR54-J.] - Use a try-with-resources statement to safely handle closeable resources


ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

include::message.adoc[]

'''
== Comments And Links
(visible only on this page)

include::comments-and-links.adoc[]
endif::env-github,rspecator-view[]
