Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can BufferedReader be closed automatically in Java

I was getting an warning on resource leak (BufferedReader was not closed). I fixed that by putting a close statement before the Return statement and ran the program. But I got an NullPointerException. My question is can it be closed automatically (somehow) when file reading was done. This question looks similar though.

like image 331
Saikat Avatar asked Dec 20 '22 18:12

Saikat


2 Answers

You can use try-with-resources Java 7 feature:

try(BufferedReader rdr = new BufferedReader(...)) {
     ...
}

it will be closed automatically when exiting block

http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

like image 115
Evgeniy Dorofeev Avatar answered Dec 22 '22 07:12

Evgeniy Dorofeev


Prior java 7 the general pattern of closable IO resources was like the following:

Resource r = null; // either stream, reader, writer etc
try { 
    r = ... // create resource
    use resource r
} catch(IOException e) {
   // some code
} finally {
    if (r != null) {
         r.close();
    }
}

The resource is used in finally block that guarantees that it will be closed whether the operation is done successfully or failed. null-check is needed to prevent NPE if IOException was thrown while creating the resource.

Java 7 introduced new syntax that creates illusion that the resource is closed "automatically":

try (
    Resource r = // create resource
){ 
    use resource r
} catch(IOException e) {
   // some code
} 

finally block is actually added here automatically by compiler.

I hope this answers your question about automatic closing of BufferedReader.

like image 45
AlexR Avatar answered Dec 22 '22 07:12

AlexR