




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、java的數(shù)據(jù)輸入:從控制臺輸入數(shù)據(jù)Java控制臺是一種圖形用戶界面(GUI),其作用有二:一是輸入數(shù)據(jù),二是顯示輸出結果。通過在控制臺的輸入輸出,就使用戶能完成配置、監(jiān)視、維護和故障排除等工作。Java控制臺虛擬機是否具有控制臺取決于底層平臺,還取決于調用虛擬機的方式。如果虛擬機從一個交互式命令行開始啟動,且沒有重定向標準輸入和輸出流,那么其控制臺將存在,并且通常連接到鍵盤并從虛擬機啟動的地方顯示。如果虛擬機是自動啟動的,例如由后臺作業(yè)調度程序啟動,那么它通常沒有控制臺。因此,對于普通微機里的java虛擬機來說,通??刂婆_就是指的顯示器和鍵盤,即:用顯示器輸出結果、用鍵盤輸入數(shù)據(jù)。由于輸出相
2、對比較簡單,這里主要討論輸入數(shù)據(jù)的方式。從控制臺輸入數(shù)據(jù)的方式有多種,以前主要是使用標準輸入流的方式,增加了使用Scanner類的方式,又增加了使用Console類的方式。7.8.1 使用標準輸入流的方式標準輸入流在中已經(jīng)討論過,例7-13和例7-14的數(shù)據(jù)就是從控制臺(鍵盤)輸入的,辦法很簡單,即使用標準輸入流獲得。也可以將橋接至字符流,從字符流中讀入數(shù)據(jù)。 例7-22文件復制程序,本例中先使用InputStreamReader獲取標準輸入流,再用字符流BufferedReader包裝InputStreamReader,以讀取源文件名和目標文件名。1:
3、60; import java.io.*;2: public class Example7_22 3: public static void main(String args) 4: try 5: BufferedReader br = new BufferedRead
4、er(new InputStreamReader(System.in);6: String srcFile = null, dstFile = null;7: System.out.print("請輸入源文件名:");8: srcFile = br.readLine(); /用緩沖字符流獲得源文件名9:
5、60; System.out.print("請輸入目標文件名:");10: dstFile = br.readLine(); /用緩沖字符流獲得目標文件名11: byte data=new byte1;12: BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile);13: BufferedOutputStrea
6、m bos = new BufferedOutputStream(new FileOutputStream(dstFile);14: while(bis.read(data) != -1) bos.write(data);15: bos.flush();16: System.out.println("文件復制成功!");17: bis.close();18: bos.close();19
7、: catch(IOException e)20: e.printStackTrace();21: 22: 23: 可見利用標準輸入流進行控制臺輸入的方式非常麻煩:如果從鍵盤獲取的是字符串,需要采用BufferedReader類來進行處理;如果獲取的是其他類型數(shù)據(jù),需要手工進行轉換;在讀取的過程中還必須捕獲IOException。不過這是及更早版本中從控制臺讀取數(shù)據(jù)唯一辦法。7.8.2 使用Sca
8、nner類的方式從開始,包中增加了Scanner類,它是一個可以使用正則表達式來解析基本類型和字符串的簡單文本掃描器。Scanner類從字面上講是“掃描”的意思,它把給定的字符串解析成Java的各種基本數(shù)據(jù)類型,用于分解字符串的默認的分隔符是空格,也可以定制。其構造方法如表7-15。 表7-15 Scanner類的構造方法方法描述Scanner(File source)Scanner(File source, String charsetName)構造一個新的 Scanner,其值是從指定文件掃描獲得。后者指定了字符集。Scanner(InputStream source
9、)Scanner(InputStream source, String charsetName)構造一個新的 Scanner,其值是從指定的輸入流掃描獲得。后者指定了字符集。Scanner(Readable source)構造一個新的 Scanner,其值是從指定源掃描獲得。Scanner(ReadableByteChannel source)Scanner(ReadableByteChannel source, String charsetName)構造一個新的 Scanner,其值是從指定信道掃描獲得。后者指定了字符集。Scanner(String source)構造一個新的 Scanne
10、r,其值是從指定字符串掃描獲得。 由表7-15可見,Scanner可以從指定的文件、輸入流、源、信道或字符串等多種來源構造獲得。要從控制臺讀取數(shù)據(jù),使用參數(shù)為InputStream的方法,傳遞標準輸入流給它,此時Scanner掃描該輸入流中的字符,同時還可以讓讀入的字符串匹配一定的正則表達式模式,如果不匹配時將拋出InputMismatchException異常。Scanner封裝了很多方法,比如方法next就可以從各種輸入流中連續(xù)讀入字符串。不僅如此,它還可以讀入除char之外的其他七種基本類型和兩個大數(shù)字類型,并且不需要手工進行轉換,如方法nextInt將讀入的下一數(shù)據(jù)轉換為in
11、t變量,方法nextByte將讀入的下一數(shù)據(jù)轉換為byte變量,方法nextLine將讀入的下一行轉換為String變量,等等。例7-23文件復制程序,本例中使用Scanner類讀取源文件名和目標文件名。1: import java.io.*;2: import java.util.*;3: public class Example7_23 4:
12、 public static void main(String args) 5: String srcFile = null, dstFile = null;6: Scanner scanner = new Scanner(System.in);7: System.out.print("請輸入源文件名:");8:
13、60; srcFile = scanner.nextLine();9: System.out.print("請輸入目標文件名:");10: dstFile = scanner.nextLine();11: try 12: byte data=new byte1;13: BufferedInp
14、utStream bis = new BufferedInputStream(new FileInputStream(srcFile);14: BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dstFile);15: while(bis.read(data) != -1) bos.write(data);16: bos.flush();17: Sy
15、stem.out.println("文件復制成功!");18: bis.close();19: bos.close();20: catch(IOException e)21: e.printStackTrace();22: 23: 24: 可見從鍵盤讀取的代碼得到了很大簡化,并且不必再捕獲或聲明IOEx
16、ception,但這并不是Scanner將控制臺輸入簡單化了,而是在其內部的實現(xiàn)中對各種輸入字符的處理進行了更高層次的封裝,同時已經(jīng)把IOException處理了。例7-24通過控制臺輸入多個正整數(shù),計算奇數(shù)和與偶數(shù)和。1: import java.util.*;2: public class Example7_24 3: public static void main(Stri
17、ng args) 4: int i, odd = 0, even = 0;5: System.out.print("輸入正整數(shù),以空格或回車分開,輸入非數(shù)字結束輸入:");6: Scanner scanner = new Scanner(System.in);7: while(sca
18、nner.hasNextInt()8: i = scanner.nextInt();9: if(I % 2 != 0) odd = odd + i;10: else even = even + i;11: 12: Scanner.close();13: System.out.println(&quo
19、t;奇數(shù)和是:" + odd + "n偶數(shù)和是:" + even);14: 15: 運行結果為:輸入正整數(shù),以空格或回車分開,最后輸入一個非數(shù)字結束輸入操作:3 4 5 6 7 22 3 f奇數(shù)和是:18偶數(shù)和是:327.8.3 使用Console類的方式從開始,又在包中增加了一個Console類,該類用于獲得與當前Java虛擬機關聯(lián)的基于字符的控制臺設備。在純字符的控制臺界面下,可以更加方便的讀入數(shù)據(jù)。先來看使用Console類的獲取源文件名和目標文件名的文件復制程序。例7-25文件復制程
20、序,本例中使用Console類讀取源文件名和目標文件名。1: import java.io.*;2: public class Example7_23 3: public static void main(String args) 4: String srcFile = null, dstFile = nu
21、ll;5: Console console = System.console();6: if (console = null) System.out.println( "不可獲得控制臺!" );7: else8: srcFile = console.readLine("請輸
22、入源文件名:");9: dstFile = console.readLine("請輸入目標文件名:");10: /與例7-23中1122行相同11: 12: 13: 以前輸入數(shù)據(jù)前的提示信息需要使用System.out.print();來輸出,但是使用Console類,可以在方法參數(shù)中直接放入提示信息,這進一步簡化了代碼。Conso
23、le類直接繼承自Object類,使用默認的構造方法,它提供的方法不多,表7-16中列出了Console類的方法。表7-16 Console類的方法方法描述Reader reader()獲取與此控制臺關聯(lián)的唯一Reader對象。String readLine()String readLine(String fmt, Object. args)從控制臺讀取單行文本。后者提供一個格式化提示。char readPassword()char readPassword(String fmt, Object. args)從控制臺讀取密碼,禁用回顯。后者提供一個格式化提示。PrintWriter writer
24、()獲取與此控制臺關聯(lián)的唯一PrintWriter對象。Console printf(String format, Object. args)使用指定格式字符串和參數(shù)將格式化字符串寫入此控制臺輸出流。Console format(String fmt, Object. args)使用指定格式字符串和參數(shù)將格式化字符串寫入此控制臺的輸出流中。void flush()刷新控制臺,并強制立即寫入所有緩沖的輸出。 這些方法中,readPassword是一個很重要的方法,它可以不回顯輸入密碼,這對于需要在控制臺中輸入密碼等敏感信息是一種很好的方式。例7-26使用Console類的readPas
25、sword方法讀取密碼信息。1: import java.io.*;2: public class Example7_26 3: public static void main(String args) 4: Console console = System.console();5:
26、 if( console = null ) System.out.println( "不可獲得控制臺!" );6: else 7: String user = console.readLine("請輸入用戶名:" );8: String pwd = new String(console.readPassword("請輸入密碼:");9: console.printf( "用戶名是: %sn", user);10: console.printf( "密碼是: %sn", pwd);11: pwd = "
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 蛋品加工過程中的食品安全管理體系考核試卷
- 嵌入式云平臺的應用試題及答案
- 織造設備的數(shù)據(jù)分析與優(yōu)化考核試卷
- 專業(yè)嵌入式考試準備試題及答案
- 行政管理實操能力考核試題及答案
- 數(shù)據(jù)庫監(jiān)管合規(guī)性考查試題及答案
- 應用程序監(jiān)控與測試的關系試題及答案
- 如何提高公路工程考試通過率試題及答案
- 計算機四級軟件測試工程師考點與試題及答案
- 信息系統(tǒng)監(jiān)理師全面?zhèn)淇挤桨冈囶}及答案
- MOOC 電路分析AⅠ-西南交通大學 中國大學慕課答案
- 托育運營方案
- 物理因子治療技術護理課件
- 清潔能源推廣活動方案
- 四川省成都市金牛區(qū)2024屆生物七年級第二學期期末學業(yè)質量監(jiān)測試題含解析
- 2024年中國鐵路濟南局集團有限公司招聘筆試參考題庫附帶答案詳解
- 《藥品采購培訓》課件
- 小學數(shù)學-《稅率》教學設計學情分析教材分析課后反思
- 公路日常養(yǎng)護巡查制度范本
- 《教育的本質》課件
- 材料科學與自然辯證法
評論
0/150
提交評論