In Java 7 and 8, we can use try-with-resource block which allows to declare closeable resources. Any object that implements java.lang.AutoCloseable can be used in a try-with-resource block. Following is the Java 7/8 syntax of doing that:
try(InputStream stream1 = new InputStream(....);
InputStream stream2 = new InputStream(....)){
....
}
When the above block terminates, either normally or due to an exception, the close() methods of the each stream objects are automatically called in the order in which they are declared.
Java 9 provides additional flexibility while using try-with-resource blocks, now we don't have the restriction of declaring each closeable object inside try parentheses anymore, we just need to use their references:
InputStream stream1 = new InputStream(....);
InputStream stream2 = new InputStream(....);
....
try(stream1;stream2){
....
}
Example
For simplicity, we are going to use a String object as the InputStream source. We are also going to override close() method to know when it is called.
public class TryWithResourceExample {
public static void main(String[] args) throws IOException {
InputStream inputStream = getInputStream();
try (inputStream) {
String s = new String(inputStream.readAllBytes());
System.out.println(s);
}
System.out.println("after try-with-resource block");
}
public static InputStream getInputStream() {
return new ByteArrayInputStream("test string".getBytes()) {
@Override
public void close() throws IOException {
System.out.println("closing");
super.close();
}
};
}
} Outputtest string closing after try-with-resource block
Example ProjectDependencies and Technologies Used: |