【问题标题】:How to use try-with-resources with if statement?如何在 if 语句中使用 try-with-resources?
【发布时间】:2015-04-26 10:55:25
【问题描述】:

我有简单的代码:

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。

【问题讨论】:

  • 为什么需要重用FileReader?它的所有行都被消耗掉了。
  • @SotiriosDelimanolis,我多次使用这个文件的所有行。
  • 你需要一个新的文件阅读器。
  • 如果在try with resources中使用FileReader,离开try块后会自动关闭。您确定要重复使用它吗?
  • @Dogs,SotiriosDelimanolis,看来我错了。我想,如果我要重用这个对象,我已经优化了代码。

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


【解决方案1】:

您总是必须在 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) {
            ////
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-14
    • 2013-07-18
    • 2021-04-20
    • 1970-01-01
    相关资源
    最近更新 更多