zoukankan      html  css  js  c++  java
  • 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 }

      

      

  • 相关阅读:
    ASP.NET MVC5写.php路由匹配时的问题 ASP.NET MVC 4 在 .NET 4.0 与.NET 4.5 的專案範本差異
    asp.net mvc上传头像加剪裁功能介绍
    图片延迟加载实现
    c#中多线程访问winform控件的若干问题
    C# WinForm实现控件拖动实例介绍
    C# 实现对窗体(Form)换肤
    C#读写txt文件的两种方法介绍
    C#实现JSON序列化与反序列化介绍
    高效的VS调试技巧
    SQL 添加字段和默认值脚本
  • 原文地址:https://www.cnblogs.com/niujifei/p/12244950.html
Copyright © 2011-2022 走看看