


下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、0 引言從控制臺中讀取數據是一個比較常用的功能,在 JDK 5.0 以前的版本中的實現是比較 復雜的,需要手工處理系統的輸入流。有意思的是,從 JDK 5.0 版本開始,能從控制臺中 輸入數據的方法每增加一個版本號, 就有一種新增的方法, 這也增加了選擇的種類, 可以依 據不同的要求來進行選擇。 下面來看一下, 各個版本中如何從控制臺中讀取數據以及各自的 優缺點。1 JDK 1.4 及以下版本讀取的方法JDK 1.4 及以下的版本中要想從控制臺中輸入數據只有一種辦法,即使用 System.in 獲 得系統的輸入流,再橋接至字符流從字符流中讀入數據。示例代碼如下:import ;import ;
2、public class Test1 public static void main ( String args ) String str = readString ( 請輸入字符串: );readString 方法的輸入: + str );/* 使用系統的輸入流,從控制臺中讀取數據 * 用于所用的 JDK 版本* param prompt 提示信息* return 輸入的字符串*/private static String readString ( String prompt ) BufferedReader br = new BufferedReader ( new InputStream
3、Reader( System.in); String str = null;try ;str = br.readLine (); catch ( IOException e ) e.printStackTrace ();return str;從上面的代碼段來看, 這種控制臺輸入的方法非常地麻煩, 為了能讀取整行的數據, 采 用了 BufferedReader 類來進行處理,而且在讀取的過程中還需要捕獲 IOException 。不過這 是 JDK 1.4 及以下版本中從控制臺讀取數據唯一的辦法。還有一種非控制臺讀入數據的辦 法,就是采用 Swing中的JOptionPane,會彈出一個非常漂亮
4、的輸入對話框讓使用者輸入數 據,但這是一種比較另類的做法,不推薦使用。import ;public class Test2 public static void main ( String args ) String str = readStringFromDialog ( 請輸入字符串: );readStringFromDialog 方法的輸入: + str );/* 使用 JOptionPane 的輸入對話框,輸入字符串 * 用于所用的 JDK 版本* param prompt 提示信息* return 輸入的字符串*/private static String readStringFro
5、mDialog ( String prompt ) return JOptionPane.showInputDialog (prompt );上面的兩種方法都有個共同的缺點 -只能讀取字符串, 若需要讀取其他類型的數據需要 手工進行轉換。2 JDK 5.0 讀取的方法從 JDK 5.0 開始, 基本類庫中增加了, 根據它的 API 文檔說明, 這個類是采用正則表 達式進行基本類型和字符串分析的文本掃描器。使用它的Scanner (InputStream source)構造方法,可以傳入系統的輸入流 System.in 而從控制臺中讀取數據。示例代碼如下:import ;public class
6、 Test3 public static void main ( String args )String str = readString5 (請輸入字符串: );readString5 方法的輸入: + str);/*使用掃描器類(Scanner)從控制臺中讀取字符串* 適用于 JDK 5.0 及以后的版本* param prompt 提示信息* return 輸入的字符串*/private static String readString5 ( String prompt )Scanner scanner = new Scanner( System.in );return scanner.
7、nextLine();從代碼量上來看,Test3比Testi少了很多的代碼,核心代碼只有兩行。其實并不是Scanner 將控制臺輸入給簡單化了,只是在其內部的實現中已經將IOException 處理了,而且采用InputStreamReader 來一個字符一個字符進行掃描讀取的(嘿嘿,它本身就是個掃描器) ,只 是 Scanner 做了更高層次的封裝。Scanner 不僅可以從控制臺中讀取字符串, 還可以讀取除 char 之外的其他七種基本類型 和兩個大數字類型,并不需要顯式地進行手工轉換。 Scanner 不單單只能掃描控制臺中輸入 的字符,它還可以讓讀入的字符串匹配一定的正則表達式模式,如
8、果不匹配時將拋出 InputMismatchException 異常。使用 System.in 作為它的構造參數時,它只掃描了系統輸入流中的字符。它還有其他的 構造,分別可以從文件或者是字符串中掃描分析字符串的,具體的使用方法可以參考 API 文檔說明。3 JDK 6.0 讀取的方法從 JDK 6.0 開始,基本類庫中增加了,用于獲得與當前 Java 虛擬機關聯的基于字符 的控制臺設備。在純字符的控制臺界面下,可以更加方便地讀取數據。示例代碼如下:import ;import ;public class Test4 public static void main ( String args )
9、 String str = readString6 ( 請輸入字符串: );readString6 方法的輸入: + str );/* 使用控制臺類( Console )從控制臺中讀取字符串 * 適用于 JDK 1.6 或以后的版本* param prompt 提示信息* return 輸入的字符串*/private static String readString6 ( String prompt ) Console console = System.console ();if ( console = null ) throw new IllegalStateException ( 不能使用
10、控制臺 );return console.readLine (prompt );在 Test1 和 Test3 中,輸入數據前的提示信息需要使用;來輸出,但是使用基于Console的 Test4 類,可以在方法參數中直接放入提示信息。如果需要在控制臺中輸入密碼等敏感信息的話, 像在瀏覽器或者是應用程序中那樣顯示 替代字符,在 JDK 6.0 以前的做法是相當麻煩的(具體的做法可以參考 Java 編程語言中 的口令屏蔽一文),而使用 Con sole類的readPassword ()方法可以在控制臺上不回顯地 輸入密碼,并將密碼結果保存在 char 數組中,根據 API 文檔的建議,在使用后應立
11、即將數 組清空,以減少其在內存中占用的時間,以便增強安全性。但是, Console 也有一些缺點,根據 ConsoleAPI 文檔的說明:虛擬機是否具有控制臺取決于底層平臺, 還取決于調用虛擬機的方式。 如果虛擬機從一 個交互式命令行開始啟動, 且沒有重定向標準輸入和輸出流, 那么其控制臺將存在, 并且通 常連接到鍵盤并從虛擬機啟動的地方顯示。 如果虛擬機是自動啟動的 (例如, 由后臺作業調 度程序啟動) ,那么它通常沒有控制臺。通過上面的文檔說明可以看出, 在使用 IDE 的情況下, 是無法獲取到 Console 實例的, 原因在于在 IDE 的環境下,重新定向了標準輸入和輸出流,也是就是將系統控制臺上的輸入輸出重定向到了IDE的控制臺中。因此,在IDE中不能使用這個程序, 而Testi和Test3就沒有這種限制。4 總結以上囊括了 Java 中各種版本從控制臺中讀入數據的方法, 將對它們的優缺點進行了分 析。下面給出了一些使用建議,可供參考:JRE 1.4 或以下版本的情況下,沒得選擇只能采用 Test1 或者是非控制臺讀入的 T
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論