如何在if语句中使用Try-with-resources?

时间:2015-02-24 17:21:56

标签: java resources java-7 try-with-resources

我有简单的代码:

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

    String line;

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

我想写类似的东西:

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

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

    String line;

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

允许我重复使用FileReader。可能吗?如果没有,如何正确重用FileReader?如果重要的话,我会使用java 8

1 个答案:

答案 0 :(得分:8)

您始终必须定义try-with-resources块的新变量部分。 这是Java 7/8中实现的当前限制。在Java 9中,他们考虑支持你原生要求的内容。

然而,您可以使用以下小技巧:

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) {
            ////
        }
    }
}