A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周亮 中级黑马   /  2012-12-30 14:47  /  1406 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
//创建多个键盘输入br时,如果把前面的br释放资源,后面的程序在执行时会报java.io.IOException异常,这是为什么?
public class SystemIntest {

        public static void main(String[] args) throws IOException {                               
                BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));                //创建第一个输入流对象br1
                String line1=null;
                while((line1=br1.readLine())!=null){
                        if("over".equals(line1))
                                break;
                        System.out.println(line1);
                }
                br1.close();//关闭br1,释放资源
               
                BufferedReader br2=new BufferedReader(new InputStreamReader(System.in));                //创建第二个输入流对象br2
                String line2=null;
                while((line2=br2.readLine())!=null){
                        if("over".equals(line2))
                                break;
                        System.out.println(line2);
                }
                br2.close();//关闭br2,释放资源
        }
}

评分

参与人数 1技术分 +1 收起 理由
邵天强 + 1

查看全部评分

3 个回复

倒序浏览
InputStream i1 = System.in;
InputStream i2 = System.in;
System.out.println(i1==i2);
System.out.println(i1.equals(i2));
测试了一下,发现返回的是同一个对象。即在一个控制台中,控制台输入流只有一个

你写的代码那里,第一次关闭“br1.close();//关闭br1,释放资源”,其实关闭了System.in,关闭之后,在接下来的代码中,你使用line2=br2.readLine(),此时的System.in早就被你关闭了,就会产生错误。关闭的流不可再用

评分

参与人数 1技术分 +1 收起 理由
邵天强 + 1

查看全部评分

回复 使用道具 举报
楼上正解~
回复 使用道具 举报
2楼说的对,但是可以看看错误提示的,IOException后面还有一句话的,System closed。很多时候看错误提示就能找到错误的地方的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马