[Java]基本IO輸出Output及輸入Input-Console

Java的輸出及輸入控制大都定義在java.io.*裡,像是檔案File的讀寫,週邊設備RS232、LPT等的輸出與輸入都需要到Java IO。而Java IO大概分成二大類,一類是byte的讀取與寫出,可讀取寫入二位元binary的資料,而另一個是char的讀取與寫入,提供文字的讀取與寫入。

System類別並不屬於java.io的套件,而是屬於java.lang套件,在使用時預設載入,所以並不需要特別去import它。

  • System.in 通常是指鍵盤的輸入,為java.io.InputStream類別
  • System.out 通常是指Console螢幕輸出,為java.io.PrintStream類別
  • System.err 同System.out,主要是用在系統出錯時輸出至Console螢幕

註:Java本身在處理字串時均是使用utf8 uncode的方式,不過在Windows的Console(螢幕)字串的顯示與輸入都是使用ISO-8859-1編碼,所以需要先把字串轉換成Big5再行輸出,在Linux上則不會有這種問題。

System.out

  • System.out.println(內容):輸出”內容”加上”斷行\r\n”至Console(螢幕)
  • System.out.print(內容):輸出”內容”至Console(螢幕)

如果要輸出的內容需要有字串、文字、日期等,可以利用字串的連接+來把字串串連起來進行輸出。ex."中文"+123

如果需要自行做斷行,可以使用\r\n來做換行動作。ex.System.out.print("中文\r\n我換行了");

Out.png

範例原始碼:

System.in

System.in為InputStream串流類別,可以直接使用read(byte[])來取出輸入內容、read()每次輸入的ascii數字(再轉換成字元char),或是利用BufferedReader來直接讀取一行內容等等,以下範例會實作這幾種種方式。

鍵盤的輸入完成預設為enter鍵,也就是\r\n。

(char)read()

對於中文字部份並無法判別,需要先把讀入的字元全部放進一個char 陣例,再利用new String(char[])來使中文字正常

In.png

範例原始碼:

使用BufferedReader一次讀取一行

需先把System.in轉換成InputStreamReader才可以讓BufferedReader使用,中文部份在此例子並不需要特別處理

In2.png

範例原始碼:

read(byte[])

當輸入的內容長度大於byte長度時,就會被先行輸出,而byte陣例設定越大使用的記憶體也越大。中文部份因為Console是ISO-8859-1編碼,所以需要利用new String(byte[],"編碼")來轉換成Big5輸出

由底下第一個圖可以知道當byte[]設定128時,字串輸入不足128長度時,輸出時還是會自動補足的,所以String內容還需要使用trim來去除多出來的空白部份。

In3.png

In3-1.png

範例原始碼:

2 comments on “[Java]基本IO輸出Output及輸入Input-Console

發表迴響