黑马程序员技术交流社区
标题:
System.setIn的执行顺序问题
[打印本页]
作者:
高鑫
时间:
2012-6-21 00:55
标题:
System.setIn的执行顺序问题
本帖最后由 高鑫 于 2012-6-22 14:33 编辑
import java.io.*;
class Hello
{
public static void main(String args[])throws IOException
{
BufferedReader br=
new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=
new BufferedWriter(new OutputStreamWriter(System.out));
String s=null;
System.setIn(new FileInputStream("Hello.java"));
while((s=br.readLine())!=null)
{
if(s.equals("over"))
break;
bw.write(s.toUpperCase());
bw.newLine();
bw.flush();
}
}
}
复制代码
为什么把system.setIn这句放在while循环上,就无法改变System.in了??谁能详细给我介绍下这个程序的执行步骤,什么时候从控制台录入数据,什么时候执行循环,详细点,谢谢。有朋友说我的问题不是太清楚,我重新问一下,我理解是BufferedReader br= new BufferedReader(new InputStreamReader(System.in));执行到的时候,程序暂停,等待控制台输入,当输入了字符之后,程序才继续执行下面的语句,直到结束,我的理解对吗??
作者:
闾丘日月
时间:
2012-6-21 01:02
本帖最后由 闾丘日月 于 2012-6-21 01:11 编辑
我猜一下你的问题吧,表述的不是太清楚
你是不是想把hello.java中的文件输出的屏幕
如果是这样的话你应该在关联System.in这个流之前将这个System.in给改掉,也就是说setIn方法写在Buffered那行前面就没问题。
但有可能你要问的问题不是这个。
作者:
丁二跃
时间:
2012-6-21 01:23
为什么把system.setIn这句放在while循环上,就无法改变System.in了??谁能详细给我介绍下这个程序的执行步骤,什么时候从控制台录入数据,什么时候执行循环,详细点,谢谢
不是无法改变System.in,此处你已经改变了标准输入,但是你br的赋值在改变之前,所以其仍旧从控制台接收数据。
import java.io.*;
class Hello
{
public static void main(String args[])throws IOException
{
BufferedReader br=
new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=
new BufferedWriter(new OutputStreamWriter(System.out));
String s=null;
System.setIn(new FileInputStream("i:/ccc/t.java"));
while((s=br.readLine())!=null)
{
if(s.equals("over"))
break;
bw.write(s.toUpperCase());
bw.newLine();
bw.flush();
}
br=new BufferedReader(new InputStreamReader(System.in));
while((s=br.readLine())!=null)
{
if(s.equals("over"))
break;
bw.write(s.toUpperCase());
bw.newLine();
bw.flush();
}
}
}
复制代码
如上,在你敲入 over 后将会输出文件内容i
作者:
孙安庆
时间:
2012-6-21 01:39
问题不是把system.setIn这句放在while循环上,而是应该问为什么放在了BufferedReader下面,输入流却没有改变?
先改变流,下面如果用到了输入流,java会自动替换,这应该是底层实现;如果后改变流,但是BufferedReader不知道啊,
他用的还是原来的。自己多试几次就明白了
作者:
高鑫
时间:
2012-6-21 14:00
我吧问题明确了下,大家可以帮我看下
作者:
黑马_张佳超
时间:
2012-6-21 17:40
class Hello
{ /*
*先创建控制台输入的br对象和输出的bw对象。初始化的br对象在调用readLine()方法时处于等待输入状态。
*然后执行System.setIn();虽然修改了标准输入的源,但是,br对象并为修改标准输入的方式,要想setIn()生效需重新创建br的实例对象。
*即:br = new BufferedReader(new InputStreamReader(System.in)); 注意,要在修改标准输入方式之后创建新的br对象。
*最后就是执行的循环操作,如果在br没有被重新创建的时候,只能按照开始定义的控制台输入的方式来执行程序。也就是当你输入over的时候才能停止程序。
*/
public static void main(String args[])throws IOException
{
BufferedReader br=
new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=
new BufferedWriter(new OutputStreamWriter(System.out));
String s=null;
System.setIn(new FileInputStream("Hello.java"));
while((s=br.readLine())!=null)
{
if(s.equals("over"))
break;
bw.write(s.toUpperCase());
bw.newLine();
bw.flush();
}
}
}
复制代码
作者:
徐传任
时间:
2012-10-10 12:17
看看...........................
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2