设为首页收藏本站订阅更新

无忧脚本

 找回密码
 加入无忧

QQ登录

只需一步,快速开始

搜索
查看: 2751|回复: 3

[求助] StreamReader明明创建了却提示关闭

[复制链接]
发表于 2012-7-30 11:25:30 | 显示全部楼层 |阅读模式
本帖最后由 那一刀的风流 于 2012-7-30 11:36 编辑

请教java问题,我学了4天了。。。这个是个项目作业。

我写一个方法,这个方法被循环调用。
方法开始就创建 Reader对象,中间调用read()方法,方法结束时就close()这个对象
第一次调这个方法没问题,第二次调方法在代码第9行readLine()那行就提示流已经被关闭。
明明我方法的开头new 了对象,这是啥原因?

  1. public int getUserAction() {
  2.         InputStreamReader ir = null;
  3.         BufferedReader br = null;
  4.         char cs=(new char[1])[0];
  5.         try {
  6.             ir = new InputStreamReader(System.in);
  7.             br = new BufferedReader(ir);
  8.             char[] cc = new char[]{'a', 'b', 'c', 'd', 'n', 'p', 'A', 'B', 'C', 'D', 'N', 'P'};
  9.             String s = br.readLine();
  10.             label1:
  11.             while (s.length() == 1) {
  12.                 cs = s.charAt(0);
  13.                 for (char ccc : cc) {
  14.                     if (ccc == cs) {
  15.                         break label1;
  16.                     }
  17.                 }
  18.                 s=br.readLine();
  19.             }
  20.         } catch (IOException e) {
  21.             e.printStackTrace();
  22.         } finally {
  23.            if (ir != null) {
  24.                 try {
  25.                    br.close();
  26.                     ir.close();
  27.                 } catch (IOException ee) {
  28.                     ee.printStackTrace();
  29.                 }
  30.             }
  31.         }
  32.         return (int) cs;
  33.     }
复制代码

 楼主| 发表于 2012-7-30 12:28:01 | 显示全部楼层
asfman给的答案

Most, if not all, input streams, output streams, readers and writers will close any underlying input stream, output stream, reader or writer. So when you call br.close(), this will close is, which in turn closes System.in. And that's something that you don't want.

To be able to use a BufferedReader for reading from System.in you will need to convert System.in into a Reader, and that's what the InputStreamReader will do. The only thing you could possibly change is create only one InputStreamReader / BufferedReader pair, store them (as instance fields), and use them throughout the program. And because these two will remain wrapped around System.in you will not have to close them at all.
发表于 2016-4-11 14:52:15 | 显示全部楼层
如意侠说了这么多,大家一定想知道,这“英雄帖”要如何来揭。规则很简单,4月11日起到6月30日:①关注如意客公众号→输入姓名(企业名称)、手机号码→投稿内容→结束。②登录如意客官网→输入姓名(企业名称)、手机号码→投稿内容→结束。投稿内容就是为“如意客”写一段广告语。广告语要求优美简洁、通俗易懂,便于理解、记忆和传播,最好是可以体现“如意客”的服务理念和行业特点。同时,广告语中必须出现“如意客”字样(但不计入中奖字数)。投稿不限制次数,只要在截稿时间结束以前,可以重复参与投稿,对于相同的获奖内容,按时间顺序,先投稿者胜出。
您需要登录后才可以回帖 登录 | 加入无忧

本版积分规则

小黑屋|手机版|Archiver|无忧脚本 ( 苏ICP备05080427号 )|值班电话:027-62300445   鄂公网安备 42011102000433号

GMT+8, 2017-11-25 09:47 , Processed in 0.093384 second(s), 7 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表