簡體   English   中英

我如何在while循環中關閉BufferedReader

[英]How can I close BufferedReader in the while loop

當我嘗試在while循環中關閉BufferedReader時,它將引發IOException: Stream closed當循環第二次執行時, IOException: Stream closed

我的代碼是這樣的:

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? 提前致謝。

我如何在while循環中關閉BufferedReader

正在 while循環關閉它,這就是問題所在。

在循環之前將其打開,並且完全不要將其關閉,因為它包裹在System.in ,無法重新打開。

你可以做幾件事

    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語句(如果存在)。

同樣,異常處理的全部要點是要照顧可能發生的異常。 通常,您不希望在異常中退出系統-因為如果您始終不處理異常,則代碼將終止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM