From Gossip@Openhome

Java Gossip: 使用 Console 物件 - JDK 6

在JDK 6中新增了java.io.Console類別,可以讓您取得字元為基礎的主控台裝置,例如,您可以藉由System新增的console()方法取得標 準輸入輸出裝置的Console物件,並利用它來執行一些簡單的主控台文字輸入輸出,例如:
  • ConsoleDemo.java
import java.io.Console;

public class ConsoleDemo {
public static void main(String[] args) {
System.out.print("請輸入名稱:");

Console console = System.console();
String name = console.readLine();

System.out.println("您輸入的名稱…" + name);
}
}

執行結果:

請輸入名稱:Justin
您輸入的名稱…Justin


對於主控台下的密碼輸入,Console類別還提供有一個簡單readPassword()方法,在讀取使用者於 主控台下輸入的密碼時,不會顯示使用者輸入的字元(這在過去要用其它麻煩的方式來達到),例如:
  • ConsoleDemo.java
import java.io.Console;

public class ConsoleDemo {
public static void main(String[] args) {
System.out.print("請輸入名稱:");

Console console = System.console();
String name = console.readLine();

char[] password = console.readPassword("請輸入密碼:");
System.out.println("您輸入的名稱…" + name);
System.out.println("您輸入的密碼…" + new String(password));
}
}

執行結果:
請輸入名稱:Justin
請輸入密碼:
您輸入的名稱…Justin
您輸入的密碼…123456


Console類別也提供有reader()與writer()方法,可以傳回 Reader、 Writer 物件,以便進行其它的IO處理,例如結合Scanner一同使用:
Scanner scanner = new Scanner(System.console().reader());

要注意的是,以javaw所執行的應用程式(例如在使用Eclipse或NetBeans等IDE時),沒有主控台(Console),也就取不到Console物件,使用System.console()只會傳回null

PS. Console 指的是標準輸入輸出裝置,像是 Windows 上的命令提示字元,或其它作業系統上終端機等提供文字模式的東西。