Java筆記-I/O流之系統標準輸入輸出
阿新 • • 發佈:2018-12-09
Java的標準輸入和輸出介紹
Java遵循標準I/O的模型,提供了Syetem.in,System.out,以及System.err。
System.out 是一個已經預先處理過的,被包裝成PrintStream
的物件。
System.err 和 System.out 一樣,也是一個PrintStream
。
但是 System.in 不是,它是一個未經處理的InputStream
。也就是說,可以直接使用 System.out 和 System.err 列印輸出到控制檯,但是使用System.in直接讀取資料不可以,必須先做處理。
System.in
System.in
:輸入,根據鍵盤錄入控制檯。
它是 System
System
類給我們例項化的,我們辦不到。
System.in使用方法舉例
//去掉main後的數字分別執行
// 1.System.in 最簡單的讀取位元組陣列,對控制檯輸入長度有限制
public static void main1(String[] args) throws IOException {
InputStream input = System.in;
byte[] bs = new byte[100];
System.out.println("請輸入:");
// 從控制檯讀取
int total = input.read(bs);
System.out.println("輸入了:" + new String(bs, 0, total));
input.close();
}
// 2.System.in 用BufferedReader改進,對一行長度無限制
public static void main2(String[] args) throws IOException {
InputStream input = System.in;
BufferedReader br = new BufferedReader(new InputStreamReader(input));
System.out.println("請輸入:");
// 從控制檯讀取
String str = br.readLine();
System.out.println("輸入了:" + str);
input.close();
}
System.out
System.out:輸出,輸出到控制檯。
System.out使用方法舉例
//去掉main後數字分別執行
// 1.System.out 簡單實現向控制檯輸出
public static void main1(String[] args) throws IOException {
OutputStream output = System.out;
output.write("你好啊".getBytes());
output.close();
}
// 2.System.out 用BufferedWriter改進
public static void main2(String[] args) throws IOException {
OutputStream output = System.out;
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(output));
bw.write("哈哈哈");
// 換行
bw.newLine();
bw.write("換行了!");
bw.close();
}
System.err
System.err:在控制檯輸出的內容為紅色字型!
演示使用:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("請輸入數字:");
if (in.hasNextInt()) {
System.out.println("輸入的是:" + in.nextInt());
} else {
System.err.println("輸入的不是數字!");
}
}
//如果輸入的不是數字
//syse提示的內容在控制檯用紅色字型顯示,而不是syso的黑色字型
Scanner對SystemIO的支援
用Scanner讀系統檔案
舉例:
// 用Scanner讀檔案
public static void main(String[] args) throws IOException {
Scanner input = new Scanner(new FileInputStream("D:\\唐詩三百首.txt"));
while (input.hasNextLine()) {
System.out.println(input.nextLine());
}
input.close();
}
輸入輸出重定向
介紹
System.setErr(err);
:修改syse的方向System.setIn(in);
:修改System.in的讀取方向System.setOut(out);
:修改syso的輸出方向 一般用來做錯誤日誌的輸出
以上三個 是輸出輸入重定向,可以讓System.in或者syso的方向改變,不從控制檯讀或寫,讀寫到別的地方。
System.in使用示範
public static void main(String[] args) throws IOException {
//直接將 System.in 指向 D:\\唐詩三百首.txt
System.setIn(new FileInputStream("D:\\唐詩三百首.txt"));
//所以這裡的 input 不再指向控制檯,而從D:\\唐詩三百首.txt讀
Scanner input = new Scanner(System.in);
while (input.hasNextLine()) {
System.out.println(input.nextLine());
}
input.close();
}
System.out使用示範
主要用來列印錯誤日誌
public static void main(String[] args) throws IOException {
//System.out指向D:\\錯誤日誌.txt
//這裡為了方便檢視寫的txt格式,實際常用.log格式
System.setOut(new PrintStream(new FileOutputStream("D:\\錯誤日誌.txt")));
//所以不再在控制檯輸出,而輸出在D:\\錯誤日誌.txt檔案中
System.out.println("發生錯誤了!");
}
System.err使用示範
注意:例子中我輸出到了 txt 檔案中,所以字型顏色是黑色,不同於控制檯中的紅色了。
public static void main(String[] args) throws IOException {
//System.err指向D:\\錯誤記錄.txt
System.setErr(new PrintStream(new FileOutputStream("D:\\錯誤記錄.txt")));
//所以直接syse也不在控制檯輸出,而是輸出到檔案D:\\錯誤記錄.txt 中
System.err.println("我也出錯了!");
}