Java 之 标准输入流 与 标准输出流


一、标准输入流

  Scanner 是作为一个扫描器,它能够以标准格式以及扫描器语言环境的格式的指定文件、流中读取数据。

  常用构造方法:

Scanner(File source):构造一个新的 Scanner,它生成的值是从指定文件扫描的
Scanner(InputStream source):构造一个新的 Scanner,它生成的值是从指定的输入流扫描的
Scanner(Readable source):构造一个新的 Scanner,它生成的值是从指定源扫描的
Scanner(String source):构造一个新的 Scanner,它生成的值是从指定字符串扫描的

   而默认情况下是从键盘输入的数据中扫描,即 System.in 这其实 是 System类中的一个输入流。

    Demo:

 1  @Test  2     public void test01(){  3         Scanner input = new Scanner(System.in);  4         System.out.print("请输入一个整数:"); //从键盘输入  5         int num = input.nextInt();  6         System.out.println("num = " + num);  7  input.close();  8  }  9 
10     @Test 11     public void test02() throws FileNotFoundException{ 12         Scanner input = new Scanner(new FileInputStream("1.txt"));//InputStream
13         
14         while(input.hasNextLine()){ 15             String line = input.nextLine(); 16  System.out.println(line); 17  } 18         
19  input.close(); 20  } 21 
22     @Test 23     public void test03() throws FileNotFoundException{ 24         Scanner input = new Scanner(new File("1.txt"));  //InputStream
25         
26         while(input.hasNextLine()){ 27             String line = input.nextLine(); 28  System.out.println(line); 29  } 30         
31  input.close(); 32  } 33 
34     @Test 35     public void test04() throws FileNotFoundException{ 36         Scanner input = new Scanner("1.txt");    //InputStream
37         
38         while(input.hasNextLine()){ 39             String line = input.nextLine(); 40  System.out.println(line); 41  } 42         
43  input.close(); 44  } 45 
46 
47     @Test 48     public void test05() throws FileNotFoundException{ 49         Scanner input = new Scanner(new File("d:/1.txt"),"GBK");//使用InputStream,并指定字符集
50         
51         while(input.hasNextLine()){ 52             String line = input.nextLine(); 53  System.out.println(line); 54  } 55         
56  input.close(); 57     }

 

二、标准输出流

  进入到 System 类中,发现里面有三个常量字段。

     “标准”输入流 System.in

       “标准”输出流 System.out

       “标准”错误输出流  System.err

   可以看到这三个字段都用 final修饰的,是常量,并被赋值为 null,但是打印的时候,它们并不是 null。

  接着发现了这三个方法:(重定向)

  

   

   

   

   

   通过上面的这些方法可以看到,上面的三个字段,在Java层面是常量对象,但是底层调用本地方法(调用C等底层语言)进行修改了。

  输出默认到控制台,其他控制台是个文件,查看 System类中的 initializeSystemClass() 方法

   这个方法里面有上面这三个方法,分别是把它们指向控制台。

   而对于输出流 Out,我们还以为给它指定一个新的目标。

  Demo:

 1   @Test  2     public void test01(){  3         PrintStream out = System.out;  4  System.out.println(out);  5  }  6   @Test  7     public void test02() throws FileNotFoundException{  8         System.setOut(new PrintStream("1.txt")); //指定输出流,重定向  9         
10         System.out.println("aaaa"); 11         System.out.println("bbb"); 12         System.out.println("ccc"); 13         System.out.println("ddd"); 14     }

   

  Demo : 重定向 System.in 和 System.out

 1 import java.io.FileDescriptor;  2 import java.io.FileInputStream;  3 import java.util.Scanner;  4 
 5 public class TestSystemIn {  6     public static void main(String[] args) throws Exception{  7         //重定向从文件输入
 8         System.setIn(new FileInputStream("java\\info.txt"));  9         Scanner input = new Scanner(System.in); 10         while(input.hasNext()){ 11             String str = input.nextLine(); 12  System.out.println(str); 13  } 14  input.close(); 15 
16         //重定向回键盘输入
17         System.setIn(new FileInputStream(FileDescriptor.in)); 18  } 19 } 20 
21 
22 import java.io.FileDescriptor; 23 import java.io.FileOutputStream; 24 import java.io.PrintStream; 25 
26 public class TestSystemOut { 27     public static void main(String[] args) throws Exception{ 28         System.out.println("hello"); 29         //重定向输出到文件
30         System.setOut(new PrintStream("java\\print.txt")); 31         System.out.println("world"); 32         //重定向回控制台
33         System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out))); 34         System.out.println("java"); 35  } 36 }

 

  

  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM