要點:
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。