2015-02-24 88 views
2

我有简单的代码:如何在if语句中使用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

+2

为什么你需要重复使用'FileReader'?它的所有生产线都被消耗掉了。 – 2015-02-24 17:24:12

+0

@SotiriosDelimanolis,我多次使用这个文件的所有行。 – Denis 2015-02-24 17:33:16

+1

你需要一个新的文件阅读器。 – 2015-02-24 17:34:01

回答

6

你总是必须定义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) { 
      //// 
     } 
    } 
}