JDK6中提供了java.io.Console類(lèi)專用來(lái)訪問(wèn)基于字符的控制臺(tái)設(shè)備. 你的程序如果要與Windows下的cmd或者Linux下的Terminal交互,就可以用Console類(lèi)代勞. 但我們不總是能得到可用的Console, 一個(gè)JVM是否有可用的Console依賴于底層平臺(tái)和JVM如何被調(diào)用. 如果JVM是在交互式命令行(比如Windows的cmd)中啟動(dòng)的,并且輸入輸出沒(méi)有重定向到另外的地方,那么就可以得到一個(gè)可用的Console實(shí)例. 下面代碼演示了Console類(lèi)的用法:
/** * @author chinajash */ public class ConsoleTest { public static void main(String[] args) { Console console = System.console();//獲得Console實(shí)例 if(console!=null){//判斷console是否可用 String user = new String(console.readLine("Enter user:")); //讀取整行字符 String pwd = new String(console.readPassword("Enter passowrd:")); //讀取密碼,密碼輸入時(shí)不會(huì)顯示 console.printf("User is:"+user+"\n"); console.printf("Password is:"+pwd+"\n"); }else{ System.out.println("Console is unavailable"); } } } 如果在NetBean5.5里面運(yùn)行上面程序,會(huì)輸出
Console is unavailable
表示Console不可獲得,那是因?yàn)镴VM不是在命令行中被調(diào)用的或者輸入輸出被重定向了. 但是如果我們?cè)诿钚兄羞\(yùn)行上面程序(java ConsoleTest),程序能夠獲得Console實(shí)例,并執(zhí)行如下: Enter user:chinajash Enter passowrd: User is:chinajash Password is:chinajash 在這里可以看到輸入密碼時(shí),控制臺(tái)時(shí)不顯示這些密碼字符的,但是程序可以得到輸入的密碼字符串,這與Linux下面輸入密碼的情況是一樣的。
| |