对IO输入输出重定向的疑惑,System.setIn()

HYB608 2012-10-03 04:07:21

package io;
import java.io.*;

public class TestInOutReset {
public static void main(String args[]){
try{
FileInputStream fis=new FileInputStream("D://2.txt");
System.setIn(fis); //如果将该行去掉,将下面的参数改成fis
int avg=0;
int sum=0;
int total=0;
int i;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));//将System.in改成fis
String s=br.readLine();
System.out.println(s);
while((s!=null)&&!(s.equals(""))&&!(s.equals("over"))){
i=Integer.parseInt(s);
sum++;
total+=i;
avg=total/sum;
System.out.println("Num--"+sum+";Total--"+total+";Avg--"+avg);
s=br.readLine();
}
}catch(IOException e){
e.printStackTrace();
}
}
}


疑问,重定向到底是怎么一回事,按照代码中的注释操作效果一样,程序都会从1.txt取出数据,若是如此,实现重定向System.setIn就没有存在的必要了吧,新手求指教!!!
...全文
321 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
HYB608 2012-10-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
引用 7 楼 的回复:

4楼和六楼,没能看清楚我的意思,不过还是要谢谢,5楼 能说的再详细点吗?

我的意思是如果你的程序中只有这一处需要从D://2.txt里读取,那没有必要重定向System.in,因为这只是个单例,没必要常规化,但如果你的程序中所有读取的地方都是这一个文件,则可以将System.in重定向到你这个文件,从而达到一次配置多次使用的目的
[/Quote]

哈哈 明白了 谢谢
yktd26 2012-10-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

4楼和六楼,没能看清楚我的意思,不过还是要谢谢,5楼 能说的再详细点吗?
[/Quote]
我的意思是如果你的程序中只有这一处需要从D://2.txt里读取,那没有必要重定向System.in,因为这只是个单例,没必要常规化,但如果你的程序中所有读取的地方都是这一个文件,则可以将System.in重定向到你这个文件,从而达到一次配置多次使用的目的
HYB608 2012-10-04
  • 打赏
  • 举报
回复
4楼和六楼,没能看清楚我的意思,不过还是要谢谢,5楼 能说的再详细点吗?
杀手 2012-10-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
个人浅见:
所谓重定向,是对基本输入输出的重定向。楼主的代码,是对基本输入设备(键盘,java里是System.in)进行了重定向,重定向到了文件. 也就是说,程序不从键盘接收输入了,而是从文件接收了。
楼主把下面两行代码注释掉,程序就会接收你键盘输入了。

Java code


FileInputStream fis=new FileInputStream(……
[/Quote]

+1
yktd26 2012-10-03
  • 打赏
  • 举报
回复
你这段代码里没有任何必要将System.in连到你的文件,
直接按照你注释里面的做就行了

但是如果在你程序的其他地方同样用到了System.in,并希望从你的文件里读,那重定向System.in就有意义
nmyangym 2012-10-03
  • 打赏
  • 举报
回复
个人浅见:
所谓重定向,是对基本输入输出的重定向。楼主的代码,是对基本输入设备(键盘,java里是System.in)进行了重定向,重定向到了文件. 也就是说,程序不从键盘接收输入了,而是从文件接收了。
楼主把下面两行代码注释掉,程序就会接收你键盘输入了。

FileInputStream fis=new FileInputStream("D://2.txt");
System.setIn(fis); //如果将该行去掉,将下面的参数改成fis


下面这行就是要从基本输入(键盘)接收输入。因为上面两行重定向了,就不再从键盘接收了。

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));//将System.in改成fis
花咪 2012-10-03
  • 打赏
  • 举报
回复
system.in system.out 的默认输入输出是键盘和显示器, 不是文件。通过重定向以后就可以用这样的方法操作文件了。当然了,用FileInputStream 更不会有问题啦。
HYB608 2012-10-03
  • 打赏
  • 举报
回复
为什么没有回复,求大家给看看,困惑了好久了这个问题

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧