1. 程式人生 > >Java筆記-I/O流之系統標準輸入輸出

Java筆記-I/O流之系統標準輸入輸出

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("我也出錯了!");
}