java基礎--輸入與輸出重定向(in,out,err的使用)


要點:

System.out與err是輸出流,默認是輸出到console。

system.in是輸出流,默認是接收來自鍵盤的數據

實現要求:從鍵盤和文件readme.txt中讀取數據,輸出到console,輸出到log.txt。

 1、從readme.txt讀取數據,輸出到控制檯和log.txt

import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintStream; import java.util.Scanner;

public class in_out_err {  public static void main(String[] args) throws IOException{  

//從readme.txt讀取數據,輸出到console和log.txt       BufferedInputStream in=new BufferedInputStream(new FileInputStream("c:\\readme.txt")); //創建緩衝輸入流   System.setIn(in);   BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));//將System.in封裝爲BufferReader,便於readline   String s;   while((s=stdin.readLine())!=null){    System.out.println(s);    //輸出到log.txt    PrintStream out=System.out;//保存原輸出流    PrintStream log=new PrintStream("c:\\log.txt"); //創建文件輸出流    System.setOut(log); //設置使用新的輸出流    System.out.println("以下信息應該出現在日誌文件中:"+s);    System.setOut(out); //恢復原有輸出流    System.out.println("程序運行完畢,請查看日誌文件");   } }}

 

運行結果:1.1 控制檯截圖:

                     2.2 log.txt內容截圖:  

 

 

2、從鍵盤讀數據,輸出到console和log.txt。

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.util.Scanner;


public class in_out_err {
	public static void main(String[] args) throws IOException{
		
		//從鍵盤讀取數據,輸出到console上和log.txt
		Scanner scanner=new Scanner(System.in); //創建輸入流掃描器		
System.out.println("請輸入你的身份證號:");
		String id=scanner.nextLine();
		  	//輸出到console上
		System.out.println(id);
			//輸出到log.txt
		PrintStream out=System.out;//保存原輸出流
		PrintStream log=new PrintStream("c:\\log.txt"); //創建文件輸出流
		System.setOut(log);	//設置使用新的輸出流
		System.out.println("以下信息應該出現在日誌文件中"+id);
		System.setOut(out);	//恢復原有輸出流 也可以用log.close();實現
		System.out.println("程序運行完畢,請查看日誌文件");
		
	}
}

運行結果:

  2.1 console截圖:

2.2 log.txt的內容:


F6執行當前行,F8運行到下一斷點,如果不想debug的話,一直按F8就可以了。

*******************************************************************華麗分割線**************************************************************************************

System.out和System.err已經被封裝爲PrintStream對象,可以直接使用。而System.in是一個未經封裝InputStream,所以要想利用System.in讀取文件前必須要對齊進行封裝,一般封裝爲BufferedReader(便於readline()),這就要求利用InputStreamReader將System.in轉換爲Reader。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章