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

6

我有一个简单的代码:

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

P.S.
我使用的是Java 8,如果有必要的话。


2
为什么需要重复使用 FileReader?因为它的所有行都已被消耗。 - Sotirios Delimanolis
@SotiriosDelimanolis,我多次读取此文件的所有行。 - Denis
1
你需要一个新的文件读取器。 - Sotirios Delimanolis
如果在try with resources中使用FileReader,则在离开try块后它将自动关闭。您确定要重复使用它吗? - Dogs
@Dogs,SotiriosDelimanolis,看来我错了。我以为如果重复使用这个对象,我就可以优化代码。 - Denis
显示剩余4条评论
1个回答

12

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接