华南俳烁实业有限公司

java

當(dāng)前位置:中華考試網(wǎng) >> java >> java教程 >> 文章內(nèi)容

關(guān)于Java命令行交互方式

來源:中華考試網(wǎng)  [2020年10月28日]  【

  普通的程序交互方式有命令行和GUI形式。對(duì)于GUI樣式,交互的設(shè)計(jì)可以多種多樣,但是Java做命令行交互,似乎存在著一些不足。

  命令行交互是傳統(tǒng)的交互方式,如果程序有時(shí)候需要在Unix或是Linux等系統(tǒng)上運(yùn)動(dòng)時(shí),以這種方式出現(xiàn)的可能性就比較大。命令行包括

  輸入和回顯問題,一般是以行結(jié)束,或是以某個(gè)結(jié)束符為終命令終止標(biāo)識(shí)。System.out 和System.err就用于標(biāo)準(zhǔn)的輸出和錯(cuò)誤輸出,System.in用于標(biāo)準(zhǔn)的輸入接受,一般情況下都是指鍵盤。

  如果接受參數(shù)輸入,一般的程序結(jié)構(gòu)如下:

  BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

  System.out.println("==Please input password==:");

  String pass = in.readLine(); 輸入的時(shí)候顯示屏自動(dòng)進(jìn)行輸入回顯。這個(gè)時(shí)候如果遇到輸入密碼等敏感數(shù)據(jù)的時(shí)候,就無法用*或是#這樣的符號(hào)進(jìn)行回顯屏蔽,容易暴露安全問題。

  解決的可能想法:

  1、通過監(jiān)聽鍵盤事件,對(duì)輸入的回顯進(jìn)行截獲取,把回顯進(jìn)行屏蔽,但是監(jiān)聽器如何知道何時(shí)是輸入密碼,何時(shí)是輸入普通數(shù)據(jù)?比較難以控制,而且這種監(jiān)聽?wèi)?yīng)該是線程化的,可能會(huì)存在一些意想不到的問題。

  2、如果用純Java難以實(shí)現(xiàn),那么是否可以使用其它語言的功能進(jìn)行補(bǔ)充,比如JNI,或是Windows下面的Dos腳本,Linux平臺(tái)的Shell腳本來進(jìn)行補(bǔ)充。不過這樣就不太平臺(tái)無關(guān)了。

  3、可能sun發(fā)現(xiàn)了這個(gè)不足之處,從1.6版本開始,增加了一個(gè)java.io.Console類,代表與當(dāng)前 Java 虛擬機(jī)關(guān)聯(lián)的基于字符的控制臺(tái)設(shè)備,這個(gè)Console是對(duì)原來System.in這種不足的補(bǔ)充,提供了像readPassword()等這樣的實(shí)用方法,具體請(qǐng)參考API文檔,就是專門用于對(duì)敏感信息的讀取。但是這是基于Java1.6的,如果有些場(chǎng)景受限制,不能使用1.6,那么還是無法解決上面的問題。后來查閱了一下Console類的實(shí)現(xiàn)方式,想直接把它的實(shí)現(xiàn)方式移植到1.4.xx上是比較難的,因?yàn)橛玫搅艘恍└甙姹镜男绿匦。使用Console要注意的是:虛擬機(jī)是否具有控制臺(tái)取決于底層平臺(tái),還取決于調(diào)用虛擬機(jī)的方式。如果虛擬機(jī)從一個(gè)交互式命令行開始啟動(dòng),且沒有重定向標(biāo)準(zhǔn)輸入和輸出流,那么其控制臺(tái)將存在,并且通常連接到鍵盤并從虛擬機(jī)啟動(dòng)的地方顯示。如果虛擬機(jī)是自動(dòng)啟動(dòng)的(例如,由后臺(tái)作業(yè)調(diào)度程序啟動(dòng)),那么它通常沒有控制臺(tái)。如果你在Eclipse里面啟動(dòng)程序調(diào)用Console,那么通常是沒有控制臺(tái),還是得從外部的命令行方式才能調(diào)用得到。

  總體想一下,感覺應(yīng)該還是從第2點(diǎn)出發(fā),犧牲掉一點(diǎn)通用性,這樣才能滿足這種功能需求。

責(zé)編:fushihao
  • 會(huì)計(jì)考試
  • 建筑工程
  • 職業(yè)資格
  • 醫(yī)藥考試
  • 外語考試
  • 學(xué)歷考試
安康市| 杂多县| 突泉县| 晋江市| 商都县| 永州市| 木里| 农安县| 诸城市| 阿图什市| 五寨县| 精河县| 论坛| 涿鹿县| 泰州市| 青海省| 曲麻莱县| 和林格尔县| 泌阳县| 丹寨县| 云安县| 奉贤区| 古蔺县| 奉新县| 资阳市| 和硕县| 台山市| 益阳市| 利川市| 嘉兴市| 珠海市| 丽江市| 张家界市| 安西县| 都江堰市| 九寨沟县| 莱州市| 朔州市| 东阳市| 龙泉市| 炎陵县|