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就没有存在的必要了吧,新手求指教!!!

解决方案 »

  1.   

    system.in   system.out 的默认输入输出是键盘和显示器, 不是文件。通过重定向以后就可以用这样的方法操作文件了。当然了,用FileInputStream 更不会有问题啦。
      

  2.   

    个人浅见:
    所谓重定向,是对基本输入输出的重定向。楼主的代码,是对基本输入设备(键盘,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
      

  3.   

    你这段代码里没有任何必要将System.in连到你的文件,
    直接按照你注释里面的做就行了但是如果在你程序的其他地方同样用到了System.in,并希望从你的文件里读,那重定向System.in就有意义
      

  4.   

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