Search code examples
javaresourcesjava-7try-with-resources

How to use try-with-resources with if statement?


I have the simple code:

try (FileReader file = new FileReader(messageFilePath);
     BufferedReader reader = new BufferedReader(file)) {

    String line;
    while ((line = reader.readLine()) != null) {
        ////
    }
} 

I want to write something like this:

FileReader file = null;
///.....

try (file = (file == null ? new FileReader(messageFilePath) : file);
     BufferedReader reader = new BufferedReader(file)) {

    String line;
    while ((line = reader.readLine()) != null) {
        ////
    }
} 

It would allow me to reuse FileReader. Is it possible? If not, how to correctly reuse FileReader?

P.S.
I use Java 8, if it is important.


Solution

  • You always have to define a new variable part of try-with-resources block. It is the current limitation of the implementation in Java 7/8. In Java 9 they consider supporting what you asked for natively.

    You can however use the following small trick:

    public static void main(String[] args) throws IOException {
        FileReader file = null;
        String messageFilePath = "";
    
        try (FileReader reader = file = (file == null ? new FileReader(messageFilePath) : file);
                BufferedReader bufReader = new BufferedReader(file)) {
    
            String line;
    
            while ((line = bufReader.readLine()) != null) {
                ////
            }
        }
    }