2016-03-27 235 views
0

當我試圖在while循環中關閉BufferedReader時,當循環第二次執行時它將拋出IOException: Stream closed如何在while循環中關閉BufferedReader

我的代碼是這樣的:

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

回答

2

如何關閉的BufferedReader while循環

while迴路關閉它,這就是問題。

打開之前循環,而不要關閉它在所有的,因爲它的周圍包裹System.in,不能重新打開。

+0

你的意思是我不需要關閉BufferedReader,如果我在循環之前打開它的話? – Fingal

+0

不,我的意思是你不應該關閉它,因爲它纏繞着'System.in'。哦,等等,這就是我說的。 – EJP

-1

你可以,如果您使用的是最新版本的足夠

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語句做了幾件事情

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); 
     } 
} 

,然後如果它存在最後的聲明。

另外,異常處理的要點是要處理可能發生的異常。您通常不想退出異常中的系統 - 因爲如果您沒有處理異常,代碼將終止。

+0

標題,問題和代碼中存在'while'循環與任何他想退出JVM甚至終止'NumberFormatException'循環的可能建議相矛盾。 – EJP