Java 如何在while循环中关闭BufferedReader

Java 如何在while循环中关闭BufferedReader,java,bufferedreader,Java,Bufferedreader,当我试图在while循环中关闭BufferedReader时,当循环第二次执行时,它将抛出一个IOException:streamclosed 我的代码如下: import java.io.*; class Test { public static void main(String[] args) { int option = 0; BufferedReader br = null; while (option != -1) {

当我试图在while循环中关闭BufferedReader时,当循环第二次执行时,它将抛出一个
IOException:streamclosed

我的代码如下:

import java.io.*;

class Test {
    public static void main(String[] args) {
        int option = 0;
        BufferedReader br = null;
        while (option != -1) {
            try {
                br = new BufferedReader(new InputStreamReader(System.in));
                try {
                    option = Integer.parseInt(br.readLine());
                } catch (NumberFormatException e) {
                    option = -1;    
                }

                br.close();
            } catch (IOException e) {
                System.err.println(e);
                System.exit(-4);
            }

            System.out.println(option);
        }
    }
}

我应该如何关闭BufferedReader?提前谢谢。

你可以做几件事

    try {
           br = new BufferedReader(new InputStreamReader(System.in));
           try {
                option = Integer.parseInt(br.readLine());
            } catch (NumberFormatException e) {
                option = -1;    
            }

            br.close();
        } catch (IOException e) {
            System.err.println(e);
            br.close();
            System.exit(-4);
        }
 }
如果您使用的是足够新的版本

    try {
           br = new BufferedReader(new InputStreamReader(System.in));
           try {
                option = Integer.parseInt(br.readLine());
            } catch (NumberFormatException e) {
                option = -1;    
            }
        } catch (IOException e) {
            System.err.println(e);
            System.exit(-4);
        } finally {
            br.close();
        }
如果发生异常,代码将立即前进到catch语句,然后是finally语句(如果存在)


此外,异常处理的全部要点是处理可能发生的异常。您通常不希望在异常情况下退出系统,因为如果您不处理异常,代码将终止。

您可以做几件事

    try {
           br = new BufferedReader(new InputStreamReader(System.in));
           try {
                option = Integer.parseInt(br.readLine());
            } catch (NumberFormatException e) {
                option = -1;    
            }

            br.close();
        } catch (IOException e) {
            System.err.println(e);
            br.close();
            System.exit(-4);
        }
 }
如果您使用的是足够新的版本

    try {
           br = new BufferedReader(new InputStreamReader(System.in));
           try {
                option = Integer.parseInt(br.readLine());
            } catch (NumberFormatException e) {
                option = -1;    
            }
        } catch (IOException e) {
            System.err.println(e);
            System.exit(-4);
        } finally {
            br.close();
        }
如果发生异常,代码将立即前进到catch语句,然后是finally语句(如果存在)

此外,异常处理的全部要点是处理可能发生的异常。您通常不希望在异常情况下退出系统,因为如果您不处理异常,代码将终止

如何在while循环中关闭BufferedReader

您正在
while
循环中关闭它,这就是问题所在

在循环之前打开它,不要关闭它,因为它被包裹在系统中,无法重新打开

如何在while循环中关闭BufferedReader

您正在
while
循环中关闭它,这就是问题所在


在循环之前打开它,不要关闭它,因为它缠绕在
系统中。
中,无法重新打开。

标题中出现
循环时,问题,该代码与任何可能的建议相矛盾,即他希望退出JVM,甚至终止
NumberFormatException
上的循环,代码与任何可能的建议相矛盾,即他希望退出JVM,甚至终止
NumberFormatException
上的循环。你的意思是如果我在循环之前打开BufferedReader,我不需要关闭它吗?不,我的意思是你不应该关闭它,因为它被包装在
系统中。哦,等等,我实际上是这么说的。你是说如果我在循环之前打开BufferedReader,我就不需要关闭它吗?不,我是说你不应该关闭它,因为它被包装在
系统中。哦,等等,我是这么说的。