2016-03-27 236 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